Skip to content

Storybook Documentation

เมื่อไหร่ควรใช้ Storybook

Storybook เหมาะสำหรับ:

  1. ทีมพัฒนา Component Library

    • เมื่อต้องการสร้างชุด UI Components ที่ใช้ร่วมกันในองค์กร
    • เมื่อต้องการเอกสารประกอบ Component ที่ชัดเจน
  2. โปรเจคที่ใช้ Design System

    • ช่วยให้ Design System มีชีวิตและใช้งานได้จริง
    • ทดสอบความสอดคล้องกับ Design Token
  3. แอปที่ต้องใช้ UI Components ซ้ำๆ

    • ช่วยจัดการและทดสอบ Components แยกจาก Business Logic
    • ลดความผิดพลาดเมื่อนำ Component ไปใช้
  4. ทีมที่ต้องการลดเวลาในการพัฒนา UI

    • ทดสอบ UI ได้โดยไม่ต้องรันแอปทั้งหมด
    • ตรวจสอบ Responsive Design ได้ง่าย
  5. โปรเจคที่ต้องการ Collaboration ระหว่าง Developer และ Designer

    • Designer สามารถตรวจสอบ UI ได้โดยตรง
    • Product Owner สามารถเห็นตัวอย่างการทำงานของ Components

Key Features

Featureคำอธิบาย
Component Isolationพัฒนาและทดสอบ UI Components แยกจากกันโดยไม่ต้องพึ่งพาระบบทั้งหมด เหมาะสำหรับ Component-Driven Development
Interactive Playgroundเปลี่ยน Props ผ่าน Control Panel ได้ทันที ทดสอบ State ต่างๆ ของ Component ได้ง่าย
Automated Docsสร้างเอกสารอัตโนมัติจาก Code และ Stories แสดงตัวอย่างการใช้งานพร้อม Code Snippets
Addons Ecosystemมี Addons มากมายสำหรับขยายความสามารถหลักของ Storybook
Visual Testingตรวจสอบ UI ด้วยภาพ ช่วยป้องกัน Regression ทำงานร่วมกับ Chromatic
Cross-Frameworkรองรับหลาย Framework ทั้ง Vue, React, Angular, Svelte

Installation

ใช้อะไรติดตั้งตามนี้ storybook.js.org faviconhttps://storybook.js.org/docs/get-started/install

Add-ons

ชื่อ Add-onคำอธิบาย
storybook.js.org faviconControlsเปลี่ยน props ของ component แบบอินเทอร์แอคทีฟ
storybook.js.org faviconActionsดู event handlers ที่ถูกเรียก
storybook.js.org faviconViewportเปลี่ยนขนาดหน้าจอสำหรับทดสอบ responsive
storybook.js.org faviconBackgroundsเปลี่ยนพื้นหลังของ Story
storybook.js.org faviconAccessibilityตรวจสอบ accessibility
storybook.js.org faviconStoryshotsสร้าง snapshot tests อัตโนมัติ

Writing Stories

Basic Structure

tsx
export default {
  title: 'Components/Button', // ระบุตำแหน่งใน sidebar
  component: Button, // Component ที่ต้องการแสดง
  tags: ['autodocs'], // สร้างเอกสารอัตโนมัติ
  args: { // ค่าเริ่มต้นของ props
    label: 'ปุ่มตัวอย่าง',
    size: 'medium'
  }
};

export const Primary = {}; // ตัวอย่างพื้นฐาน

export const Secondary = {
  args: {
    variant: 'secondary'
  }
};

Techniques

  1. ใช้ Args เพื่อควบคุม props แบบไดนามิก
  2. ใช้ Decorators สำหรับการ wrap component
  3. ใช้ Parameters ในการกำหนดค่าต่างๆ

Testing

Test Types

ประเภทการทดสอบคำอธิบาย
storybook.js.org faviconVisual Testsตรวจสอบ UI ด้วยภาพ
storybook.js.org faviconInteraction Testsทดสอบการโต้ตอบกับ component
storybook.js.org faviconAccessibility Testsตรวจสอบความสามารถในการเข้าถึง
storybook.js.org faviconSnapshot Testsตรวจสอบการเปลี่ยนแปลงของ component

Interaction Test Example

tsx
import { userEvent, within } from '@storybook/testing-library';

export const ClickExample = {
  play: async ({ canvasElement }) => {
    const canvas = within(canvasElement);
    await userEvent.click(canvas.getByRole('button'));
  }
};

Documentation

Using MDX

mdx
import { Meta, Story } from '@storybook/addon-docs';
import Button from './Button';

<Meta title="Components/Button" component={Button} />

# ปุ่ม (Button)

ใช้สำหรับการโต้ตอบกับผู้ใช้

<Story name="Primary" args={{ primary: true }} />

Techniques

  1. ใช้ ArgsTable เพื่อแสดง props อัตโนมัติ
  2. เพิ่มตัวอย่างโค้ดด้วย Code block
  3. ใช้ Canvas และ Story สำหรับตัวอย่าง interactive

Sharing

Publishing Methods

  1. Static Hosting
bash
npm run build-storybook
bash
yarn build-storybook
bash
pnpm run build-storybook
bash
bun run build-storybook
  1. Storybook Cloud
  • อัปโหลดผ่าน GitHub integration
  • ได้ลิงก์แชร์อัตโนมัติ
  1. Chromatic
bash
npm install -D chromatic
npx chromatic --project-token=your_token
bash
yarn add -D chromatic
yarn chromatic --project-token=your_token
bash
pnpm add -D chromatic
pnpm chromatic --project-token=your_token
bash
bun add -D chromatic
bun chromatic --project-token=your_token

Benefits

  • ทีมสามารถดู component ได้ง่าย
  • Product owner ตรวจสอบ UI ได้โดยตรง
  • QA ทดสอบ component แยกส่วนได้

Last updated: