dva的簡單理解

2022-08-17 19:48:23 字數 1572 閱讀 9528

由於最近所接觸的專案是由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...