由於最近所接觸的專案是由dva框架進行書寫的,所以對dva進行了簡單的總結,僅供參考:
dva是基於現有的應用基礎架構( redux+react-route+react-saga等)的一層輕量級的封裝
dva中model很重要,dva中的model實際上類似於封裝了redux裡面的action和reducer,並給每個model提供乙個namespace交於strore管理。這樣,在外部引用的時候,可以直接獲取到model對應的namespace,然後根據namespace獲取資料。
// index.jsx
@connect((state) => = state[ns];
return ;
})//model檔案
export default ,
reducers:})}
} 這裡面包含5個重要的屬性
namespace,state,reduces,effects,subscribe
1,描述一下這幾個屬性主要做的事情
namespace:命名空間,是model state在全域性state中所用到的key。
state:用來儲存初始化的資料
reduces:
reducers 是唯一可以更新 state 的地方,reducer 是純函式 pure function,他接收引數 state 和 action,返回新的 state,通過語句表達即 (state, action) => newstate。該函式把乙個集合歸併成乙個單值。
注意:reducer函式必須是純函式。
effects:
dva 通過對 model 增加 effects 屬性來處理 side effect(非同步任務),這是基於 redux-saga 實現的,語法為 generator。generator 返回的是迭代器,通過 yield 關鍵字實現暫停功能。
generator函式通過yield命令將非同步操作同步化,yield的目的只有乙個,讓非同步程式設計跟同步一樣,能夠很好的控制執行流程
effects裡面的put 方法,會呼叫reducers 裡面的方法,根據方法中引數type的值找到reducers中的那個方法並執行。這個過程其原理就是redux中 dispatch 乙個action的過程
effects 裡面的call方法,表示呼叫一步函式
在effects裡,,無論是yield 亦或是async 目的只有乙個:讓非同步編寫跟同步一樣,從而能夠很好的控制執行流程
generator:es6標準引入的新的資料型別,是乙個生成器函式
subscribe:
subscriptions裡面的內容表示在專案啟動載入model的時候就會執行,dispatch(});就相當於在專案啟動的時候,就會先呼叫一次effects裡面的fetchguide方法;
* query(action, ){}表示乙個worker saga,監聽所有的query action,並觸發乙個api呼叫以獲取伺服器資料。當每個query action被發起時呼叫 call 和 put 都是 redux-saga 的 effects,
資料流向:
dva簡單使用
官網 npm install dva cli g dva v yarn global add dva cli dva cli version 0.9.1dva new dva quickstartnpm start yarn start接到需求之後推薦的做法不是立刻編碼,而是先以上帝模式做整體設計。...
dva上手 簡單例子學習dva
dva是簡化的redux封裝庫,幫你自動化了redux 架構一些繁瑣的步驟,簡化了傳統redux使用過於複雜的問題。dva把乙個路由下的state reducer寫到一塊,存放到model裡面,清晰明了,邏輯簡單。export default subscriptions 各種處理非同步的操作 eff...
dva的簡單使用(一)
而 dva 就是用來滿足這些需求的 dva 的 model 物件有幾個基本的屬性,需要掌握 dva這個資料流解決方法和mvc架構類似 在models的js中中進行獲取後端資料。一定要記得在index.js中配置啊,如果忘記看下面 route.model require models xx 在rout...