StorybookReact 开发伴侣 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
wwlweihai
V2EX    React

StorybookReact 开发伴侣

  •  
  •   wwlweihai 2016 年 12 月 14 日 2764 次点击
    这是一个创建于 3347 天前的主题,其中的信息可能已经有所发展或是发生改变。

    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源码

    第 1 条附言    2016 年 12 月 15 日
    有一张图片无法查看,由于我在七牛设置了防盗链,请移步 http://www.bycoder.cn/t/storybook-react/110 查看完整内容
    3 条回复    2016-12-14 21:58:04 +08:00
    tinkerer
        1
    tinkerer  
       2016 年 12 月 14 日 via Android
    thx.
    wwlweihai
        2
    wwlweihai  
    OP
       2016 年 12 月 14 日
    哇塞, v2 上还是有很多 react 的开发者的嘛!
    wwlweihai
        3
    wwlweihai  
    OP
       2016 年 12 月 14 日
    不好意思,各位,七牛的域名加了防盗链,好久都没更新出来。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     1300 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 24ms UTC 16:54 PVG 00:54 LAX 08:54 JFK 11:54
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86