dva簡介 - React + Redux, like elm

DVA簡介

dva 是基于現(xiàn)有應(yīng)用架構(gòu) (redux + react-router + redux-saga 等)的一層輕量封裝,沒有引入任何新概念帖努,全部代碼不到 100 行乐疆。( Inspired by elm and choo. )

dva 是 framework,不是 library,類似 emberjs脑奠,會(huì)很明確地告訴你每個(gè)部件應(yīng)該怎么寫,這對于團(tuán)隊(duì)而言幅慌,會(huì)更可控宋欺。另外,除了 react 和 react-dom 是 peerDependencies 以外胰伍,dva 封裝了所有其他依賴齿诞。

DVA一共有5個(gè)API

import dva, { connect } from 'dva';

// 1. Create app
const app = dva();

// 2. Add plugins (optionally)
app.use(plugin);

// 3. Register models
app.model(model);

// 4. Connect components and models
const App = connect(mapStateToProps)(Component);

// 5. Config router with Components
app.router(routes);

// 6. Start app
app.start('#root');

API

1. app = dva(opts)

新建一個(gè)dva app,你可以配置history和initialState選項(xiàng)骂租。

  • opts.history: the history for router, default: hashHistory

  • opts.initialState: initialState of the app, default: {}

import { browserHistory } from 'dva/router';
const app = dva({ 
  history: browserHistory,
});

2. app.use(hooks)

  • onError(fn): called when an effect or subscription emit an error
  • onAction(array|fn): called when an action is dispatched, used for registering redux middleware, support Arrayfor convenience
  • onStateChange(fn): called after a reducer changes the state
  • onReducer(fn): used for apply reducer enhancer
  • onEffect(fn): used for wrapping effect to add custom behavior, e.g. dva-loading for automatical loading state
  • onHmr(fn): used for hot module replacement
  • extraReducers(object): used for adding extra reducers, e.g. redux-form needs extra form reducer

3. app.model(obj)

  • namespace:model的名稱空間
  • state:初始state
  • reducers:同步的修改狀態(tài)的操作祷杈,由actions觸發(fā)(state, action) => state
  • effects:異步的操作,并不直接修改state渗饮,由actions觸發(fā)但汞,也可以調(diào)用actions。(action, { put, call, select })
  • subscriptions:異步的只讀操作互站,并不直接修改state私蕾,可以調(diào)用actions。({ dispatch, history })

put(action)dispatch(action)
這里effects中的put(action)等同于subscriptions中的dispatch(action)胡桃,它們的作用都是分發(fā)一個(gè)action踩叭。

yield put({ type: actionType, payload: attachedData, error: errorIfHave});
dispatch({ type: actionType, payload: attachedData, error: errorIfHave});

call(asyncFunction)
調(diào)用一個(gè)異步函數(shù)

const result = yield call(api.fetch, { page: 1 });

select(function)
從全局狀態(tài)中選擇數(shù)據(jù)

const count = yield select(state => state.count);

4. app.router(({ history }) => routes)

import { Router, Route } from 'dva/routes';
app.router(({ history } => ({
  <Router history={ history }>
    <Route path="/" component={App} />
  </Router>
});

5. app.start(selector?)

啟動(dòng)應(yīng)用,selector是可選的翠胰。如果沒有selector參數(shù)容贝,它會(huì)返回一個(gè)函數(shù),這個(gè)函數(shù)返回JSX元素亡容。

https://github.com/dvajs/dva

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末嗤疯,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子闺兢,更是在濱河造成了極大的恐慌茂缚,老刑警劉巖戏罢,帶你破解...
    沈念sama閱讀 222,807評論 6 518
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異脚囊,居然都是意外死亡龟糕,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,284評論 3 399
  • 文/潘曉璐 我一進(jìn)店門悔耘,熙熙樓的掌柜王于貴愁眉苦臉地迎上來讲岁,“玉大人,你說我怎么就攤上這事衬以』貉蓿” “怎么了?”我有些...
    開封第一講書人閱讀 169,589評論 0 363
  • 文/不壞的土叔 我叫張陵看峻,是天一觀的道長阶淘。 經(jīng)常有香客問我,道長互妓,這世上最難降的妖魔是什么溪窒? 我笑而不...
    開封第一講書人閱讀 60,188評論 1 300
  • 正文 為了忘掉前任,我火速辦了婚禮冯勉,結(jié)果婚禮上澈蚌,老公的妹妹穿的比我還像新娘。我一直安慰自己灼狰,他們只是感情好宛瞄,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,185評論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著伏嗜,像睡著了一般坛悉。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上承绸,一...
    開封第一講書人閱讀 52,785評論 1 314
  • 那天裸影,我揣著相機(jī)與錄音,去河邊找鬼军熏。 笑死轩猩,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的荡澎。 我是一名探鬼主播均践,決...
    沈念sama閱讀 41,220評論 3 423
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼摩幔!你這毒婦竟也來了彤委?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 40,167評論 0 277
  • 序言:老撾萬榮一對情侶失蹤或衡,失蹤者是張志新(化名)和其女友劉穎焦影,沒想到半個(gè)月后车遂,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,698評論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡斯辰,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,767評論 3 343
  • 正文 我和宋清朗相戀三年舶担,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片彬呻。...
    茶點(diǎn)故事閱讀 40,912評論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡衣陶,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出闸氮,到底是詐尸還是另有隱情剪况,我是刑警寧澤,帶...
    沈念sama閱讀 36,572評論 5 351
  • 正文 年R本政府宣布湖苞,位于F島的核電站拯欧,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏财骨。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,254評論 3 336
  • 文/蒙蒙 一藏姐、第九天 我趴在偏房一處隱蔽的房頂上張望隆箩。 院中可真熱鬧,春花似錦羔杨、人聲如沸捌臊。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,746評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽理澎。三九已至,卻和暖如春曙寡,著一層夾襖步出監(jiān)牢的瞬間糠爬,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,859評論 1 274
  • 我被黑心中介騙來泰國打工举庶, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留执隧,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 49,359評論 3 379
  • 正文 我出身青樓户侥,卻偏偏與公主長得像镀琉,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子蕊唐,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,922評論 2 361

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