前端修仙之路

StoryBook 使用指南

2019-03-08  本文已影响0人  风之化身呀

Storybook是一个开源工具,用于独立开发React、Vue和Angular的UI组件。它能有组织和高效地构建UI组件。本文以构建 React 组件库为例说明如何使用。

1、基本用法

mkdir story
cd story
npm init
npm i --save-dev @storybook/react
npm i --save react react-dom
npm i --save-dev @babel/core
npm i --save-dev babel-loader
{
  "scripts": {
    "storybook": "start-storybook -p 9001 -c .storybook" // 指定配置文件目录为 .storybook
  }
}
import { configure } from '@storybook/react';

function loadStories() {
  require('../stories/index.js'); // 指定 story 的位置
  // 可以是任意目录,根据自己需要写路径
}

configure(loadStories, module);
import React from 'react';
import { storiesOf } from '@storybook/react';
import { Button } from '@storybook/react/demo'; // 这里引入你想展示的组件

storiesOf('Button', module)
  .add('with text', () => (  // 一个 add 表示添加一个 story
    <Button>Hello Button</Button>
  ))
  .add('with some emoji', () => (  // 这里是另一个 story
    <Button><span role="img" aria-label="so cool">😀 😎 👍 💯</span></Button>
  ));   
npm run storybook

大致长这样:


{
  "scripts": {
    "build-storybook": "build-storybook -c .storybook -o .out"
  }
}

2、进阶用法

// param1 表示 story 名称,会显示在侧边栏;
// func 是一个返回待测试组件的函数
add(param1,func) 
// .storybook/config.js
import { configure } from '@storybook/react';

const req = require.context('../src/stories', true, /\.js$/);

function loadStories() {
  req.keys().forEach(filename => req(filename));
}

configure(loadStories, module);
import React from 'react';
import { storiesOf } from '@storybook/react';
import MyComponent from '../my_component';

storiesOf('MyComponent', module)
  .addDecorator(storyFn => <div style={{ textAlign: 'center' }}>{storyFn()}</div>)
  .add('without props', () => <MyComponent />)
  .add('with some props', () => <MyComponent text="The Comp" />);

也可全局配置:

// config.js
import { configure ,addDecorator} from '@storybook/react';
import React from 'react';
const req = require.context('../src/stories', true, /\.js$/);

addDecorator(storyFn => <div style={{ textAlign: 'center' }}>{storyFn()}</div>);

function loadStories() {
  req.keys().forEach(filename => req(filename));
}

configure(loadStories, module);
npm add -D @storybook/addons @storybook/addon-actions @storybook/addon-links @storybook/addon-notes storybook-readme

2、建立配置文件 .storybook/addons.js

import '@storybook/addon-actions/register';
import '@storybook/addon-links/register';
import '@storybook/addon-notes/register';
import 'storybook-readme/register';

3、使用

import React from 'react';
import { storiesOf } from '@storybook/react';
import { action } from '@storybook/addon-actions';
import { Button } from '@storybook/react/demo';
import markdown from './test.md';

storiesOf('Buttons', module)
  .addDecorator(storyFn => <div style={{ textAlign: 'center' }}>{storyFn()}</div>)
  .add('with text', () => (
    <Button onClick={action('clicked')}>Hello Button111</Button>
  ),{
    notes:{markdown}   // 将会渲染 markdown 内容
  }) 
import React from 'react';
import { storiesOf } from '@storybook/react';
import Button from '../components/Button';

storiesOf('Buttons|Simple', module).add('with text', () => (
  <Button onClick={action('clicked')}>Hello Button</Button>
));

storiesOf('Buttons|Emoji', module).add('with some emoji', () => (
  <Button onClick={action('clicked')}>
    <span role="img" aria-label="so cool">
      😀 😎 👍 💯
    </span>
  </Button>
));
上一篇下一篇

猜你喜欢

热点阅读