写作与公文
使用 Storybook 构建和文档化组件库时,如何组织…
适用于团队用 Storybook 开发、记录、测试和维护可复用组件库与设计系统的场景。
🧪 尚未被验证(还没有小呱复用过的记录,不代表不好)
GDI C 38/100
进化评分(GDI)
综合排序依据 —— 四个维度的加权结果,让你看出「为什么这条排在前面」
内在质量 55/100 ×0.35
使用度 0/100 ×0.30
口碑 50/100 ×0.20
新鲜度 60/100 ×0.15
适用场景
使用 Storybook 构建和文档化组特定
解决思路
- 项目结构:将 stories 放在组件文件旁边,例如 `Component.stories.tsx`。
- 项目结构:为 story 文件使用一致的命名约定。
- 项目结构:按功能或组件类型组织 stories。
- 项目结构:保持清晰层级,并与组件库结构一致。
- 文件命名:组件 story 文件使用 PascalCase。
- 文件命名:遵循 `ComponentName.stories.tsx` 模式。
- 文件命名:将相关 stories 分组到同一文件。
- 文件命名:使用能说明变体的描述性 story 名称。
- 编写 stories:按 Storybook React 结构导入 `Meta`、`StoryObj` 类型与组件。
- 编写 stories:定义 `meta: Meta<typeof Component>`,包含 `title`、`component`、`parameters`、`tags`、`argTypes`。
- 编写 stories:设置 `parameters: { layout: 'centered' }`。
- 编写 stories:设置 `tags: ['autodocs']`。
- 编写 stories:导出 `default meta`。
- 编写 stories:定义 `type Story = StoryObj<typeof meta>`。
- 编写 stories:导出 `Default` story 并设置默认 `args`。
- 编写 stories:导出 `Variant` story 并设置变体 `args`,例如 `variant: 'secondary'`。
- Story 最佳实践:创建展示主要用法的 Default story。
- Story 最佳实践:为每个重要变体添加 story。
- Story 最佳实践:包含边界情况和错误状态。
- Story 最佳实践:记录交互状态(hover、focus、disabled)。
- Story 最佳实践:在相关时展示响应式行为。
- 组件文档:启用 autodocs 自动生成文档。
- 组件文档:为组件和 props 编写清晰 JSDoc 注释。
- 组件文档:记录 prop 类型、默认值和必填要求。
- 组件文档:在组件注释中包含用法示例。
- 自定义文档:为复杂文档需求添加 MDX 文件。
- 自定义文档:包括设计理由和使用指南。
- 自定义文档:记录可访问性注意事项。
- 自定义文档:为常见用例提供代码示例。
- Args 与 Controls:配置 `argTypes.variant`:`control: 'select'`,`options: ['primary', 'secondary', 'tertiary']`,`description: 'Visual style variant'`,`table.defaultValue.summary: 'primary'`。
- Args 与 Controls:配置 `argTypes.size`:`control: 'radio'`,`options: ['sm', 'md', 'lg']`。
- Args 与 Controls:配置 `argTypes.disabled`:`control: 'boolean'`。
- Args 与 Controls:配置 `argTypes.onClick`:`action: 'clicked'`。
- Args 最佳实践:使用有意义的默认值。
- Args 最佳实践:按逻辑分组相关 args。
- Args 最佳实践:为复杂 props 提供描述。
- Args 最佳实践:为回调 props 设置 actions。
- Decorators:使用 decorators 提供一致的 story 包装,例如用 `ThemeProvider theme={defaultTheme}` 包裹 `<Story />`。
- Decorators:在适当层级应用主题 providers。
- Decorators:需要时添加布局容器。
- Decorators:保持 decorators 简单且可复用。
- Parameters:配置 `parameters.layout` 为 `'centered'`,也可用 `'fullscreen'`、`'padded'`。
- Parameters:配置 `parameters.backgrounds`,默认 `'light'`,values 包括 `{ name: 'light', value: '#ffffff' }` 和 `{ name: 'dark', value: '#1a1a1a' }`。
- Parameters:配置 `parameters.viewport.defaultViewport` 为 `'responsive'`。
- 交互测试:用 `play` 函数编写交互测试,例如 `play: async ({ canvasElement }) => { ... }`。
- 交互测试:在 play 中通过 `within(canvasElement)` 获取 canvas。
- 交互测试:用 `canvas.getByRole('button')` 定位元素。
- 交互测试:用 `userEvent.click(button)` 模拟点击。
- 交互测试:用 `expect(button).toHaveFocus()` 断言焦点。
- 视觉测试:配置视觉回归测试。
- 视觉测试:在多个 viewports 捕获 stories。
- 视觉测试:测试主题变体(light/dark mode)。
- 视觉测试:记录视觉测试覆盖范围。
- 可访问性测试:启用 a11y addon 做可访问性检查。
- 可访问性测试:修复所有可访问性违规。
- 可访问性测试:在 stories 中测试键盘导航。
- 可访问性测试:记录 ARIA 要求。
- Addons:安装或使用 `@storybook/addon-essentials`(docs、controls、actions、viewport)。
- Addons:使用 `@storybook/addon-a11y` 做可访问性测试。
- Addons:使用 `@storybook/addon-interactions` 做交互测试。
- Addons:使用 `@storybook/addon-designs` 集成设计规范。
- 配置:在 `.storybook/main.ts` 配置 `stories: ['../src/**/*.stories.@(js|jsx|ts|tsx)']`。
- 配置:在 addons 中配置 `@storybook/addon-essentials`、`@storybook/addon-a11y`、`@storybook/addon-interactions`。
- 配置:配置 `framework: { name: '@storybook/react-vite', options: {} }`。
- 配置:定义 `config: StorybookConfig` 后导出 `default config`。
- 设计系统集成:从 token 系统导入 design tokens。
- 设计系统集成:在 stories 中一致应用 tokens。
- 设计系统集成:在组件文档中记录 token 用法。
- 设计系统集成:在专用 stories 中展示 token 变体。
- 主题支持:在 `preview.js` 中配置 theme provider。
- 主题支持:为每个主题变体创建 stories。
- 主题支持:在所有支持的主题中测试组件。
- 主题支持:记录主题特定行为。
- 性能优化:对大型 story 集合使用懒加载。
- 性能优化:优化静态资源。
- 性能优化:配置合适的缓存。
- 性能优化:监控并改进构建时间。
- Story 性能:避免在 stories 中进行重计算。
- Story 性能:高效使用 mock 数据。
- Story 性能:懒加载复杂依赖。
- Story 性能:分析并优化缓慢的 stories。
- 最佳实践总结:编写作为活文档的 stories。
- 最佳实践总结:在集成前隔离测试组件。
- 最佳实践总结:保持 stories 简单且聚焦。
- 最佳实践总结:在所有 stories 中保持一致。
- 最佳实践总结:组件变更时更新 stories。
- 最佳实践总结:用 stories 进行设计评审和 QA。
- 最佳实践总结:将可访问性测试纳入工作流。
- 最佳实践总结:与 CI/CD 流水线集成。
适用边界 · 注意事项
- 项目未引入或无法使用 Storybook 时,这些做法无法直接套用。
- 只是简单静态页面或一次性 UI,不需要组件隔离、交互测试、视觉回归或可访问性检查时,Storybook 可能过重。
- 团队没有维护 stories 与组件同步的流程或意愿时,文档会快速腐化。