[npm] Storybook
storybook/examples @ github
危險
這篇內容混雜了 CSF3(meta
) 和 CSF2(ComponentMeta
)的寫法,請讀者特別留意。
TL;DR
# storybook 會檢視專案中相依的套件,自動提供最合適的設定檔
$ npx sb init
$ npx sb upgrade
$ npm run storybook
$ npm run storybook -- --no-manager-cache # clear cache in the Storybook
# 如果想要檢視專案所吃到的 webpack 設定
$ npx start-storybook --debug-webpack # develop
$ npx build-storybook --debug-webpack # production
- 如果有使用到 react-docgen 這個 addon,建議元件使用 named export 以避免未預期的錯誤,例如,沒辦法自動解析元件的 props、沒辦法自動產生 action、被 styled-component 影響而無法正確解析 props 等等。可以參考 Nothing shows up, this is broken!。
args
可以把 props 帶入 component 中parameters
可以改變 addon 的設定decorators
可以在 component 外再包一層 wrapper
撰寫 Story
- How to write stories @ Writing Stories
- Component Story Format @ API > Stories
基本
使用 Component Story Format (CSF) 的方式來撰寫 storybook 中的 story,所謂 CSF 的方式是指透過 ES Modules 的方式來定義 stories 和 component metadata,每一個元件的 .stories
檔中都包含 default export 和多個 named exports:
- default export 會用來控制 Storybook 如何列出 stories,並且提供 addons 所需的資訊
- named exports 則用來定義個別的 story,預設的情況下,export 的名稱 就會是該 Story 的名稱。
提示
使用 default export 來描述 component;使用 named exports 來描述 stories。一個 Component 下可以有多個 Stories。
// https://storybook.js.org/docs/react/writing-stories/introduction
import type { Meta, StoryObj } from '@storybook/react';
import { Button } from './Button';
const meta: Meta<typeof Button> = {
title: 'Example/Button', // optional
component: Button,
};
// 一個 component 有一個 default export
export default meta;
type Story = StoryObj<typeof Button>;
// 一個 named export 對應一個 story
export const Primary: Story = {
// 雖然這裡示範使用 render,但比較常見的方式是使用後面說明的 args
render: () => <Button primary label="Button" />,
// 改變 story 的名稱
name: 'change a new name',
};