Storybook指南

CSF 3 故事格式

// Button.stories.tsx import type { Meta, StoryObj } from '@storybook/react'; import { Button } from './Button'; const meta = { title: 'UI/Button', component: Button, parameters: { layout: 'centered', }, tags: ['autodocs'], argTypes: { variant: { control: 'select', options: ['primary', 'secondary', 'danger'], }, onClick: { action: 'clicked' }, }, } satisfies Meta<typeof Button>; export default meta; type Story = StoryObj<typeof meta>; export const Primary: Story = { args: { variant: 'primary', children: '点击我', }, }; export const Disabled: Story = { args: { ...Primary.args, disabled: true, }, };

装饰器 (Decorators)

// 全局装饰器 (.storybook/preview.ts) const preview: Preview = { decorators: [ (Story) => ( <ThemeProvider theme="light"> <div style={{ padding: '24px' }}> <Story /> </div> </ThemeProvider> ), ], parameters: { backgrounds: { default: 'light', values: [ { name: '浅色', value: '#ffffff' }, { name: '深色', value: '#1c2035' }, ], }, }, };

常用插件

插件用途
@storybook/addon-controls交互式 Props 面板(内置)
@storybook/addon-actions记录回调调用(内置)
@storybook/addon-a11y无障碍审计面板
@storybook/addon-viewport响应式视口测试
@storybook/addon-docs自动生成组件文档
@chromatic-com/storybookChromatic 视觉回归测试
storybook-dark-mode深色/浅色模式切换