一、 dva的API
1.?app = dva(opts):? ?創建應用,返回 dva 實例.
2.?app.use(hooks):?配置 hooks 或者注冊插件。(插件最終返回的是 hooks )
注:hooks包含
1111. onError((err, dispatch) => {})
effect執行錯誤或subscription通過done主動拋錯時觸發,可用于管理全局出錯狀態。
其他hooks可見:https://github.com/dvajs/dva/blob/master/docs/API_zh-CN.md#appusehooks
3.? app.model(model) :注冊 model,詳見#Model部分。
4.?app.unmodel(namespace):
取消 model 注冊,清理 reducers, effects 和 subscriptions。subscription 如果沒有返回 unlisten 函數,使用app.unmodel會給予警告??
5. app.router(({ history, app }) => RouterConfig): 注冊路由表。
6. app.start(selector?):
啟動應用。selector可選,如果沒有selector參數,會返回一個返回 JSX 元素的函數。、
二、 dva 中的 Model
model中的五個屬性:
1.?namespace:
model 的命名空間,同時也是他在全局 state 上的屬性,只能用字符串,不支持通過.的方式創建多層命名空間。
2.?state
初始值,優先級低于傳給dva()的opts.initialState。
3.?reducers
以 key/value 格式定義 reducer。用于處理同步操作,唯一可以修改state的地方。由action觸發。
格式為(state, action) => newState或[(state, action) => newState, enhancer]。
4.?effects
以 key/value 格式定義 effect。用于處理異步操作和業務邏輯,不直接修改state。由action觸發,可以觸發action,可以和服務器交互,可以獲取全局state的數據等等。
格式為*(action, effects) => void或[*(action, effects) => void, { type }]。
5.?subscriptions
以 key/value 格式定義 subscription。subscription 是訂閱,用于訂閱一個數據源,然后根據需要 dispatch 相應的 action。在app.start()時被執行,數據源可以是當前的時間、服務器的 websocket 連接、keyboard 輸入、geolocation 變化、history 路由變化等等。