← 返回
开发者工具 中文

Storybook

Build component stories with proper args, controls, decorators, and testing patterns.
使用规范的参数、控件、装饰器及测试模式构建组件故事。
ivangdavila
开发者工具 clawhub v1.0.0 1 版本 100000 Key: 无需
★ 3
Stars
📥 1,243
下载
💾 9
安装
1
版本
#latest

概述

CSF Format (Component Story Format)

  • Default export is component meta—title, component, args, decorators
  • Named exports are stories—each export becomes a story in sidebar
  • satisfies Meta for TypeScript type checking
  • CSF3 uses object syntax, not functions—export const Primary = { args: {...} }

Args vs ArgTypes

  • args are actual prop values passed to component—args: { label: 'Click me' }
  • argTypes configure controls UI—argTypes: { size: { control: 'select', options: ['sm', 'lg'] } }
  • Default args in meta apply to all stories—override in individual stories
  • argTypes: { onClick: { action: 'clicked' } } logs events in Actions panel

Controls

  • Auto-inferred from TypeScript props—boolean becomes toggle, string becomes text input
  • Override control type: argTypes: { color: { control: 'color' } }
  • Disable control: argTypes: { children: { control: false } }
  • Options for select: control: { type: 'select' }, options: ['a', 'b', 'c']

Decorators

  • Wrap stories with context—providers, layout wrappers, theme
  • Component-level in meta: decorators: [(Story) => ]
  • Global in .storybook/preview.js: applies to all stories
  • Order matters—later decorators wrap earlier ones

Play Functions

  • Interactive testing within story: play: async ({ canvasElement }) => {...}
  • Use @storybook/testing-library for queries—within(canvasElement).getByRole()
  • await userEvent.click(button) for interactions
  • expect(element).toBeVisible() for assertions—tests run in browser

Actions

  • argTypes: { onClick: { action: 'clicked' } } auto-logs to Actions panel
  • Or import: import { action } from '@storybook/addon-actions'
  • Use fn() from @storybook/test in Storybook 8+ for spying in play functions
  • Actions help verify event handlers without manual console.log

Story Organization

  • Title path creates hierarchy: title: 'Components/Forms/Button'
  • Stories appear in order of export—put Primary first
  • tags: ['autodocs'] generates docs page automatically
  • parameters: { docs: { description: { story: 'text' } } } adds story description

Common Patterns

  • Default state: export const Default = {}
  • With all props: export const WithIcon = { args: { icon: } }
  • Edge cases: Empty, Loading, Error, Disabled states as separate stories
  • Responsive: Use viewport addon parameters per story

Render Functions

  • Custom render: render: (args) =>
  • Access context in render: render: (args, { globals }) => ...
  • Useful when story needs different JSX structure than default
  • Prefer decorators for wrapping, render for restructuring

Configuration

  • .storybook/main.js: addons, framework, stories glob patterns
  • .storybook/preview.js: global decorators, parameters, argTypes
  • Stories glob: stories: ['../src/*/.stories.@(js|jsx|ts|tsx)']
  • Static assets: staticDirs: ['../public'] for images/fonts

Common Mistakes

  • Forgetting to install addon AND add to main.js addons array
  • Using storiesOf API—deprecated, use CSF exports
  • Missing component in meta—controls won't auto-generate
  • Decorators returning Story without calling it: (Story) => not (Story) => Story

版本历史

共 1 个版本

  • v1.0.0 当前
    2026-03-29 01:45 安全 安全

安全检测

腾讯云安全 (Keen)

安全,无风险
查看报告

腾讯云安全 (Sanbu)

安全,无风险
查看报告

🔗 相关推荐

developer-tools

CodeConductor.ai

larsonreever
AI驱动平台,提供快速全栈开发、智能体、工作流自动化及低代码AI集成的可扩展产品创建。
★ 68 📥 180,150
ai-intelligence

Self-Improving + Proactive Agent

ivangdavila
自我反思+自我批评+自我学习+自组织记忆。智能体评估自身工作、发现错误并持续改进。
★ 1,358 📥 318,312
developer-tools

Github

steipete
使用 `gh` CLI 与 GitHub 交互,通过 `gh issue`、`gh pr`、`gh run` 和 `gh api` 管理议题、PR、CI 运行及高级查询。
★ 668 📥 324,133