使用getstorybook构建React Native Living Style Guide平台

目前社区上,最好的,支持React Native的Living Style Guide工具是getstorybook,本文我们就一起来看看如何用这个工具构建一个Living Style Guide(以iOS模拟器为例)。

安装getstorybook,步骤非常简单,只需要运行命令

npm i getstorybook --save-dev

运行getstorybook,

getstorybook

该命令会在项目根目录下生成一个新的目录storybook, 该目录是一个完整的,独立的React Native应用。


storybook_directory.png

同时为往项目的package.json的scripts中插入一条命令

"scripts": {
    ...
    "storybook": "storybook start -p 7007",
    ...
  },

初始化getstorybook之后,接下来就可以启动storybook了

npm run storybook

该命令会在本地拉起一个服务器提供storybook的目录界面,同时通过React Native的Hot Module Replacement特性完成与模拟器上的应用的通信,把模拟器的当前应用切换到storybook目录下的应用以及后续的通过浏览器操作应用状态都是通过这个特性完成。storybook启动完成之后,你可以通过http://localhost:7007 访问到该界面。因为还没有启动React Native应用,所以目录界面上没有任何内容。接下来,在新的命令行窗口启动react native应用。

npm run run-ios

该命令会启动iOS模拟器,启动好之后,就可以看到如下的界面(注:界面上笔者已经添加了多个UI组件的Demo)


storybook_start.png

这样,Living Style Guide平台就搭建好了,接下来的工作就是不断在往该平台添加UI组件的Demo。

添加UI组件Demo

往storybook中添加Demo非常简单,下面就是一个关于SearchPage的Demo:

import React from 'react';
import {storiesOf, action} from '@kadira/react-native-storybook';
import SearchPage from '../../../../src/property/components/searchPage';

storiesOf('Property', module)
  .add('SearchPage', () => (
    <SearchPage request={{place_name:"London"}} isLoading={false} search={action('Search called')}/>
  ));

从代码上看,只需要简单的三步就可以完成一个Demo:

  1. import要做Demo的UI组件
  2. storiesOf定义了一个组件目录
  3. add添加Demo

在构建项目的storybook时,一些可以帮助我们更有效的开发Demo小Tips:

  1. 尽可能的把目录结构与源代码结构保持一致,
  2. 一个UI组件对应一个Demo,保持Demo代码的独立性和灵活性。
  3. Demo命名以UI组件名加上Demo缀,
  4. 在组件参数复杂的场景下,可以提供一个fakeData的目录用于存放重用的UI组件Props数据

getstorybook的其它特性

  • Decorators: Demo装饰器,可以把UI Demo放到一个容器中获取更加的视觉效果。
const CenterDecorator = (story) => (
  <div style={{ textAlign: "center" }}>
    {story()}
  </div>
);

storiesOf('Button', module)
  .addDecorator(CenterDecorator)
  .add('with text', () => (
    <Button onClick={action('clicked')}>Hello Button</Button>
  ));
  • Actions:事件记录器,记录事件发生时接收到的数据,例子见SearchPageDemo代码。
  • Links:UI Demo连接器,通过这个工具可以把多个UI Demo串联起来形成一个User Journey。下例中就把SearchResultsPageDemo和PropertyDetailsPageDemo串联了起来:
import React from 'react';
import {storiesOf, linkTo} from '@kadira/react-native-storybook';

import {properties} from '../fakeData/properties';
import SearchResultsPage from '../../../../src/property/components/searchResultsPage';

storiesOf('Property', module)
  .add('SearchResultsPage', () => (
    <SearchResultsPage
      properties={properties}
      rowPressed={linkTo('Property', 'PropertyDetailsPage-1')}/>
  ));

因为storybook的addon机制,使得storybook能够很容易的扩展,因此,storybook可能支持更多,更有趣的特性,有需要的话,开发者还可以编写自己的addon。

一点遗憾

storybook不支持Hot Reloading,在React Native平台上不支持storybook-addon-knobs,这导致在storybook无法在IDE中修改代码,直接查看到结果,需要reload界面才能看到最新的修改效果。不过,还好React Native reload界面的速度很快。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,911评论 5 460
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 82,014评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 142,129评论 0 320
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,283评论 1 264
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,159评论 4 357
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,161评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,565评论 3 382
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,251评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,531评论 1 292
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,619评论 2 310
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,383评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,255评论 3 313
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,624评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,916评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,199评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,553评论 2 342
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,756评论 2 335

推荐阅读更多精彩内容