การเขียนสตอรี CSF3
ส่งออกออบเจ็กต์เมตาเริ่มต้นและสตอรีที่มีชื่อด้วย Component Story Format 3
การเขียนสตอรี CSF3 เป็นบทเรียน React Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน React Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส React Academy มีบทเรียนทั้งหมด 4 บทเรียน
CSF3 คืออะไร
รูปแบบเรื่องราวขององค์ประกอบ 3 (CSF3) คือรูปแบบเรื่องราวปัจจุบันของ Storybook เรื่องราวเป็นออบเจ็กต์ JavaScript/TypeScript ธรรมดา โดยไม่จำเป็นต้องใช้ฟังก์ชันการแสดงผลสำหรับกรณีง่าย ๆ
การส่งออก Meta
ไฟล์เรื่องราวทุกไฟล์ต้องมีการส่งออกเริ่มต้น ซึ่งก็คือออบเจ็กต์ Meta ที่อธิบายองค์ประกอบและกำหนดการกำหนดค่าร่วมกันของเรื่องราว
import type { Meta } from '@storybook/react';
import { Button } from './Button';
const meta: Meta<typeof Button> = {
title: 'UI/Button', // Storybook sidebar path
component: Button,
tags: ['autodocs'], // enables auto-generated docs page
};
export default meta;การส่งออกเรื่องราวแบบมีชื่อ
การส่งออกแบบมีชื่อแต่ละรายการจากไฟล์จะเป็นเรื่องราวหนึ่งรายการ ใน CSF3 เรื่องราวคือออบเจ็กต์ที่มีพร็อพเพอร์ตี args ซึ่งเป็นพร็อพส์ขององค์ประกอบ
import type { StoryObj } from '@storybook/react';
type Story = StoryObj<typeof Button>;
export const Primary: Story = {
args: { label: 'Click me', variant: 'primary' },
};
export const Secondary: Story = {
args: { label: 'Cancel', variant: 'secondary' },
};
export const Disabled: Story = {
args: { label: 'Unavailable', disabled: true },
};การสืบทอดเรื่องราว
เรื่องราวจะสืบทอดอาร์กิวเมนต์จากออบเจ็กต์เมตา กำหนดค่าเริ่มต้นร่วมกันใน meta.args และเขียนทับในแต่ละเรื่องราวตามความจำเป็น
const meta: Meta<typeof Button> = {
component: Button,
args: {
onClick: fn(), // from @storybook/test
disabled: false,
},
};
export const Large: Story = {
args: { size: 'large', label: 'Large Button' }, // merges with meta args
};การเขียนทับฟังก์ชันการแสดงผล
ระบุฟังก์ชัน render ในเรื่องราวสำหรับกรณีซับซ้อนที่ต้องใช้การห่อ JSX แบบกำหนดเองหรือมีหลายอินสแตนซ์
export const WithIcon: Story = {
render: (args) => (
<div style={{ display: 'flex', gap: 8 }}>
<Button {...args} icon={<StarIcon />} />
<Button {...args} icon={<HeartIcon />} />
</div>
),
args: { label: 'Action' },
};ตัวตกแต่งในเรื่องราวแต่ละรายการ
เพิ่มอาร์เรย์ decorators ให้กับเรื่องราวเพื่อห่อเรื่องราวนั้นด้วยผู้ให้บริการหรือโครงร่างเพิ่มเติมสำหรับเรื่องราวนั้นเท่านั้น
export const InsideCard: Story = {
decorators: [
(Story) => (
<div style={{ padding: 24, background: '#f5f5f5' }}>
<Story />
</div>
),
],
args: { label: 'Card Button' },
};พารามิเตอร์ในเรื่องราว
ใช้ parameters เพื่อกำหนดค่าส่วนเสริมสำหรับแต่ละเรื่องราว เช่น การตั้งค่าพื้นหลังหรือพื้นที่แสดงผลสำหรับสถานะเฉพาะ
export const DarkMode: Story = {
parameters: {
backgrounds: { default: 'dark' },
},
args: { label: 'Dark Button', variant: 'primary' },
};แท็ก autodocs
การเพิ่ม tags: ['autodocs'] ให้กับเมตาจะสร้างหน้าเอกสารอัตโนมัติที่มีตารางพร็อพส์และตัวอย่างแบบโต้ตอบจากเรื่องราวที่มีชื่อทั้งหมด
เรื่องราวสำหรับแต่ละสถานะ
เขียนเรื่องราวสำหรับทุกสถานะที่มีความหมายขององค์ประกอบ ได้แก่ ว่างเปล่า กำลังโหลด ข้อผิดพลาด รายการเดียว หลายรายการ เค้าโครง RTL เป็นต้น
export const Loading: Story = { args: { isLoading: true } };
export const Error: Story = { args: { error: 'Failed to load' } };
export const Empty: Story = { args: { items: [] } };
export const WithData: Story = { args: { items: mockUsers } };หลักการตั้งชื่อ
ใช้ชื่อเรื่องราวแบบ PascalCase ที่อธิบายสถานะ หลีกเลี่ยงชื่อทั่วไปอย่าง Default และระบุให้ชัดเจน เช่น PrimaryDisabled, SecondaryWithIcon
การจัดกลุ่มเรื่องราวด้วยชื่อเรื่อง
title ในเมตาใช้รูปแบบเครื่องหมายทับเพื่อสร้างกลุ่มซ้อนกันในแถบด้านข้างของ Storybook โดย 'Forms/Input' จะสร้างกลุ่ม Forms ที่มีกลุ่มย่อย Input
const meta: Meta<typeof TextInput> = {
title: 'Forms/TextInput',
component: TextInput,
};
// Sidebar: Forms → TextInput → Primary, Error, Disabled...การนำเรื่องราวกลับมาใช้ในการทดสอบ
เรื่องราว CSF3 เป็นออบเจ็กต์ธรรมดา ดังนั้นคุณจึงสามารถนำเข้าและประกอบเรื่องราวเหล่านี้ในการทดสอบหน่วยหรือเรื่องราวอื่นได้
import { Primary } from './Button.stories';
test('renders primary button', () => {
render(<Button {...Primary.args} />);
expect(screen.getByText('Click me')).toBeInTheDocument();
});ตรวจสอบอย่างรวดเร็ว
ใน CSF3 คุณกำหนดพร็อพส์หรือสถานะของเรื่องราวอย่างไร
สรุปทบทวน
เรื่องราว CSF3 เป็นออบเจ็กต์ที่มีชนิดข้อมูลและมี args กำหนดค่าเริ่มต้นร่วมกันใน meta.args เขียนทับค่าในแต่ละเรื่องราว ใช้ render สำหรับ JSX แบบกำหนดเอง และเพิ่ม tags: ['autodocs'] เพื่อสร้างเอกสารโดยอัตโนมัติ เขียนเรื่องราวสำหรับทุกสถานะที่มีความหมายขององค์ประกอบ
คำถามที่พบบ่อย
บทเรียน “การเขียนสตอรี CSF3” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “การเขียนสตอรี CSF3” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส React Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส React Academy มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “การเขียนสตอรี CSF3”
ส่งออกออบเจ็กต์เมตาเริ่มต้นและสตอรีที่มีชื่อด้วย Component Story Format 3 คุณปฏิบัติ React Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน React Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน React Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน
บทเรียน “การเขียนสตอรี CSF3” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน React Academy นี้ได้ไหม
ได้ บทเรียน React Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- การตั้งค่า Storybook ในโปรเจกต์ React
- การเขียนสตอรี CSF3
- Args, Controls และส่วนเสริม Actions
- การทดสอบ Storybook และการถดถอยด้านภาพ