使用getstorybook構(gòu)建React Native Living Style Guide平臺(tái)

目前社區(qū)上趟章,最好的钾挟,支持React Native的Living Style Guide工具是getstorybook履羞,本文我們就一起來(lái)看看如何用這個(gè)工具構(gòu)建一個(gè)Living Style Guide(以iOS模擬器為例)枣申。

安裝getstorybook嚷缭,步驟非常簡(jiǎn)單饮亏,只需要運(yùn)行命令

npm i getstorybook --save-dev

運(yùn)行g(shù)etstorybook,

getstorybook

該命令會(huì)在項(xiàng)目根目錄下生成一個(gè)新的目錄storybook, 該目錄是一個(gè)完整的,獨(dú)立的React Native應(yīng)用阅爽。


storybook_directory.png

同時(shí)為往項(xiàng)目的package.json的scripts中插入一條命令

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

初始化getstorybook之后路幸,接下來(lái)就可以啟動(dòng)storybook了

npm run storybook

該命令會(huì)在本地拉起一個(gè)服務(wù)器提供storybook的目錄界面,同時(shí)通過(guò)React Native的Hot Module Replacement特性完成與模擬器上的應(yīng)用的通信优床,把模擬器的當(dāng)前應(yīng)用切換到storybook目錄下的應(yīng)用以及后續(xù)的通過(guò)瀏覽器操作應(yīng)用狀態(tài)都是通過(guò)這個(gè)特性完成劝赔。storybook啟動(dòng)完成之后,你可以通過(guò)http://localhost:7007 訪問(wèn)到該界面胆敞。因?yàn)檫€沒(méi)有啟動(dòng)React Native應(yīng)用着帽,所以目錄界面上沒(méi)有任何內(nèi)容杂伟。接下來(lái),在新的命令行窗口啟動(dòng)react native應(yīng)用仍翰。

npm run run-ios

該命令會(huì)啟動(dòng)iOS模擬器赫粥,啟動(dòng)好之后,就可以看到如下的界面(注:界面上筆者已經(jīng)添加了多個(gè)UI組件的Demo)


storybook_start.png

這樣予借,Living Style Guide平臺(tái)就搭建好了越平,接下來(lái)的工作就是不斷在往該平臺(tái)添加UI組件的Demo。

添加UI組件Demo

往storybook中添加Demo非常簡(jiǎn)單灵迫,下面就是一個(gè)關(guān)于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')}/>
  ));

從代碼上看秦叛,只需要簡(jiǎn)單的三步就可以完成一個(gè)Demo:

  1. import要做Demo的UI組件
  2. storiesOf定義了一個(gè)組件目錄
  3. add添加Demo

在構(gòu)建項(xiàng)目的storybook時(shí),一些可以幫助我們更有效的開(kāi)發(fā)Demo小Tips:

  1. 盡可能的把目錄結(jié)構(gòu)與源代碼結(jié)構(gòu)保持一致瀑粥,
  2. 一個(gè)UI組件對(duì)應(yīng)一個(gè)Demo挣跋,保持Demo代碼的獨(dú)立性和靈活性。
  3. Demo命名以UI組件名加上Demo綴狞换,
  4. 在組件參數(shù)復(fù)雜的場(chǎng)景下避咆,可以提供一個(gè)fakeData的目錄用于存放重用的UI組件Props數(shù)據(jù)

getstorybook的其它特性

  • Decorators: Demo裝飾器,可以把UI Demo放到一個(gè)容器中獲取更加的視覺(jué)效果修噪。
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:事件記錄器查库,記錄事件發(fā)生時(shí)接收到的數(shù)據(jù),例子見(jiàn)SearchPageDemo代碼黄琼。
  • Links:UI Demo連接器樊销,通過(guò)這個(gè)工具可以把多個(gè)UI Demo串聯(lián)起來(lái)形成一個(gè)User Journey。下例中就把SearchResultsPageDemo和PropertyDetailsPageDemo串聯(lián)了起來(lái):
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')}/>
  ));
  • specificationsstoryshots:測(cè)試工具脏款,開(kāi)發(fā)者甚至可以在storybook中直接完成UI的自動(dòng)化測(cè)試现柠。

因?yàn)閟torybook的addon機(jī)制,使得storybook能夠很容易的擴(kuò)展弛矛,因此,storybook可能支持更多比然,更有趣的特性丈氓,有需要的話,開(kāi)發(fā)者還可以編寫自己的addon强法。

一點(diǎn)遺憾

storybook不支持Hot Reloading万俗,在React Native平臺(tái)上不支持storybook-addon-knobs,這導(dǎo)致在storybook無(wú)法在IDE中修改代碼饮怯,直接查看到結(jié)果闰歪,需要reload界面才能看到最新的修改效果。不過(guò)蓖墅,還好React Native reload界面的速度很快库倘。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末临扮,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子教翩,更是在濱河造成了極大的恐慌杆勇,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,470評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件饱亿,死亡現(xiàn)場(chǎng)離奇詭異蚜退,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)彪笼,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,393評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門钻注,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人配猫,你說(shuō)我怎么就攤上這事幅恋。” “怎么了章姓?”我有些...
    開(kāi)封第一講書人閱讀 162,577評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵佳遣,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我凡伊,道長(zhǎng)零渐,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書人閱讀 58,176評(píng)論 1 292
  • 正文 為了忘掉前任系忙,我火速辦了婚禮诵盼,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘银还。我一直安慰自己风宁,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,189評(píng)論 6 388
  • 文/花漫 我一把揭開(kāi)白布蛹疯。 她就那樣靜靜地躺著戒财,像睡著了一般。 火紅的嫁衣襯著肌膚如雪捺弦。 梳的紋絲不亂的頭發(fā)上饮寞,一...
    開(kāi)封第一講書人閱讀 51,155評(píng)論 1 299
  • 那天,我揣著相機(jī)與錄音列吼,去河邊找鬼幽崩。 笑死,一個(gè)胖子當(dāng)著我的面吹牛寞钥,可吹牛的內(nèi)容都是我干的慌申。 我是一名探鬼主播,決...
    沈念sama閱讀 40,041評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼理郑,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼蹄溉!你這毒婦竟也來(lái)了咨油?” 一聲冷哼從身側(cè)響起哑蔫,我...
    開(kāi)封第一講書人閱讀 38,903評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤中狂,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后晤斩,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體餐弱,經(jīng)...
    沈念sama閱讀 45,319評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡宴霸,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,539評(píng)論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了膏蚓。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片瓢谢。...
    茶點(diǎn)故事閱讀 39,703評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖驮瞧,靈堂內(nèi)的尸體忽然破棺而出氓扛,到底是詐尸還是另有隱情,我是刑警寧澤论笔,帶...
    沈念sama閱讀 35,417評(píng)論 5 343
  • 正文 年R本政府宣布采郎,位于F島的核電站,受9級(jí)特大地震影響狂魔,放射性物質(zhì)發(fā)生泄漏蒜埋。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,013評(píng)論 3 325
  • 文/蒙蒙 一最楷、第九天 我趴在偏房一處隱蔽的房頂上張望整份。 院中可真熱鬧,春花似錦籽孙、人聲如沸烈评。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 31,664評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)讲冠。三九已至,卻和暖如春适瓦,著一層夾襖步出監(jiān)牢的瞬間沟启,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 32,818評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工犹菇, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人芽卿。 一個(gè)月前我還...
    沈念sama閱讀 47,711評(píng)論 2 368
  • 正文 我出身青樓揭芍,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親卸例。 傳聞我的和親對(duì)象是個(gè)殘疾皇子称杨,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,601評(píng)論 2 353

推薦閱讀更多精彩內(nèi)容