隨著 Component Driven 興起,元件化變為不可逆的趨勢,在元件化後的可替換性與重複利用性上有了很大的幫助,但如果直接在系統上開發,則會被其他的元件影響,讓開發元件變得麻煩,另外也需要增加撰寫文件的時間,使得需要較多的時間做元件化動作。
Storybook 是個 npm 套件,它可以為單一 UI 元件撰寫名為 story 的程式碼段,每個 story 都代表一個元件的使用情境,我們也可以為一個元件撰寫多個 story 。這些 story 會被 Storybook 解析並產生一個文件,使用者可以參考這文件,並在文件中試用並改變元件的各個參數。
Storybook 作為元件開發的框架,解決了在開發元件時會遇到的問題,藉由在 Storybook 中所撰寫的 story ,對於開發或是想要使用元件的開發者來說有下列的好處:
Storybook 為 npm 套件,須要先安裝:
npx sb init
如果不是在已存在的專案中執行指令的話,它會詢問要用何種專案模式建立,像是 react 、 vue 等。
安裝完後,使用 npm run storybook
執行。
Storybook 使用 Component Story Format 撰寫 story ,這是個 ES2015 模組,藉由導出的物件定義各個 story 。
下面是個 button
元件的 stories :
import { createButton } from './Button';
// 1. 基本配置
export default {
title: 'Example/Button',
argTypes: {
// Controls
label: { control: 'text' },
primary: { control: 'boolean' },
backgroundColor: { control: 'color' },
size: {
control: { type: 'select', options: ['small', 'medium', 'large'] },
},
// Actions
onClick: { action: 'onClick' },
},
};
// 2. 共用模板
const Template = ({ label, ...args }) => {
return createButton({ label, ...args });
};
// 3. 各個 story
export const Large = Template.bind({});
Large.args = {
size: 'large',
label: 'Button',
};
export const Small = Template.bind({});
Small.args = {
size: 'small',
label: 'Button',
};
export default
的物件定義 Storybook 的基本配置,例如要放置的位置、元件對象或是預設參數...等。export
有名稱的函式,它們會變為一個個不同的 story ,可以藉由修改 args
讓使用者看到不同的參數對於元件的變化。Storybook 有兩個 tab , Canvas 與 Docs :
Canvas 中的 Controls 可以控制各個 args
,去改變預設的參數,藉以更了解元件的效果。而 Actions 則可以看到各種事件在觸發時的時機與其所帶的參數。