Storybook——React 开发伴侣

2016-12-14 16:29:08 +08:00
 wwlweihai

Storybook —— React 开发伴侣

React 组件 UI 开发环境,其作用在于让前端工程师专注在样式,组件功能开发过程中。


安装初始化请按照 官方文档 指引进行,以下为我们开发中的一个片段

配置

// [Pro]/.storybook/config.js
import React from 'react';
import { configure } from '@kadira/storybook';
import 'normalize.css/normalize.css';

// 使用 material-ui 需配置
import getMuiTheme from 'material-ui/styles/getMuiTheme';
import MuiThemeProvider from 'material-ui/styles/MuiThemeProvider';
addDecorator((getStory) => (
    <MuiThemeProvider muiTheme={getMuiTheme()}>
        {getStory()}
    </MuiThemeProvider>
))
import injectTapEventPlugin from 'react-tap-event-plugin';
injectTapEventPlugin();


// 加载 *.css 文件
const cssReq = require.context('../client/stylesheet', true, /.css$/);
// 加载 *.story.js 文件
const viewReq = require.context('../imports/ui/pages/live', true, /.story.js$/);

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

configure(loadStories, module);

有时候,我们在开发时,还需要加载字体或者脚本,那么在上述文件同级的目录下增加如下文件即可:

// [Pro]/.storybook/config.html
<script src="xxxx"></script>

编写组件 story

配置完毕后,开始为每一个 component 编写 story 。我们推荐 story 文件以[componentName].story.js 的文件命名,同时将 story 文件放在 component 的同级目录下。

以下为某一 story 文件:

//[Pro]/ui/component/bidOperator.story.js
import React from 'react';
import { storiesOf, action } from '@kadira/storybook';
import BidOperator from './bidOperator.jsx';

storiesOf('view.LiveCar.comp.BidOperator', module)
    .add('可出价', () => (
        <BidOperator
            start={start}
            incRange={incRange}
            userCanBid={true}
            subBid={subBid}
        />
    ))
    .add('不可出价', () => (
        <BidOperator
            start={start}
            incRange={incRange}
            userCanBid={false}
            subBid={subBid}
        />
    ))
    ;
import Chance from 'chance';
const chance = new Chance();

const start = chance.floating({min: 2, max: 10, fixed: 0});
const incRange = chance.floating({min: 0, max: 1, fixed: 1});

const subBid = function(){
    console.log('subBid ');
}

启动

// 常用启动指令
start-storybook -p 9001 -c .storybook -s ./public

//-p 端口, -c 配置目录,-s 静态文件目录
//启动后 通过 localhost:9001 访问

如下是某组件的两种状态,通过属性(userCanBid)传递即可快速的测试出不同状态下的 comp ,下面看下效果图:

(请注意中间有 loading 状态,其受组件内部 state 控制)

至此,我们完成了 storybook 基本工作,剩下的内容就是将开发重心放在 component 样式,组件功能中去。

以上仅为我们项目开发中的一个环节,除了上述内容外,实际中我们还需要编写接口文档,客户端渲染检测,浏览器兼容测试,这一系列的工作都需要有一套完整的开发环境,恰巧 storybook 满足了我们这个开发环节中的需求。这个工具非常有用!

使用 storybook 进行 ui 的开发,还存在一个重点问题,组件嵌套,关于这个一内容,将在下一节中重点讲述

更多资料

官方文档

时间选择器 demo源码

2400 次点击
所在节点    React
3 条回复
tinkerer
2016-12-14 18:08:27 +08:00
thx.
wwlweihai
2016-12-14 20:27:48 +08:00
哇塞, v2 上还是有很多 react 的开发者的嘛!
wwlweihai
2016-12-14 21:58:04 +08:00
不好意思,各位,七牛的域名加了防盗链,好久都没更新出来。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/327638

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX