預設輸出檔案。
預設輸出 react-router 介面, react-router-redux 的介面通過屬性 routerredux 輸出。
比如:
import from 'dva/router';
非同步請求庫,輸出 isomorphic-fetch 的介面。不和 dva 強繫結,可以選擇任意的請求庫。
輸出 redux-saga 的介面,主要用於用例的編寫。(用例中需要用到 effects)
解決元件動態載入問題的 util 方法。
比如:
import dynamic from 'dva/dynamic';
const userpagecomponent = dynamic();
opts
包含:
models: 返回 promise 陣列的函式,promise 返回 dva model
component:返回 promise 的函式,promise 返回 react component
建立應用,返回 dva 例項。(注:dva 支援多例項)
opts
包含:
如果要配置 history 為browserhistory
,可以這樣:
import createhistory from 'history/createbrowserhistory';
history: createhistory(),
});
history,
initialstate,
onerror,
onaction,
onstatechange,
onreducer,
oneffect,
onhmr,
extrareducers,
extraenhancers,
});
配置 hooks 或者註冊外掛程式。(外掛程式最終返回的是 hooks )
比如註冊 dva-loading 外掛程式的例子:
import createloading from 'dva-loading';
...
hooks包含:
onerror((err, dispatch) => {})
effect
執行錯誤或subscription
通過done
主動拋錯時觸發,可用於管理全域性出錯狀態。
注意:subscription
並沒有加try...catch
,所以有錯誤時需通過第二個引數done
主動拋錯。例子:
subscriptions: , done) ,
},});
如果我們用 antd,那麼最簡單的全域性錯誤處理通常會這麼做:
import from 'antd';
onerror(e) ,
});
onaction(fn | fn)
在 action 被 dispatch 時觸發,用於註冊 redux 中介軟體。支援函式或函式陣列格式。
例如我們要通過 redux-logger 列印日誌:
import createlogger from 'redux-logger';
onaction: createlogger(opts),
});
onstatechange(fn)
state
改變時觸發,可用於同步state
到 localstorage,伺服器端等。
onreducer(fn)
封裝 reducer 執行。比如借助 redux-undo 實現 redo/undo :
import undoable from 'redux-undo';
onreducer: reducer => ;
const newstate = undoable(reducer, undoopts)(state, action);
// 由於 dva 同步了 routing 資料,所以需要把這部分還原
return ;
},},
});
oneffect(fn)
封裝 effect 執行。比如 dva-loading 基於此實現了自動處理 loading 狀態。
onhmr(fn)
熱替換相關,目前用於 babel-plugin-dva-hmr 。
extrareducers
指定額外的 reducer,比如 redux-form 需要指定額外的form
reducer:
import from 'redux-form'
extrareducers: ,
});
extraenhancers
指定額外的 storeenhancer ,比如結合 redux-persist 的使用:
import from 'redux-persist';
extraenhancers: [autorehydrate()],
});
註冊 model,詳見 #model 部分。
註冊路由表。
通常是這樣的:
import from 'dva/router';推薦把路由資訊抽成乙個單獨的檔案,這樣結合 babel-plugin-dva-hmr 可實現路由和元件的熱載入,比如:return (
history=>
path="/"
);});
而有些場景可能不使用路由,比如多頁應用,所以也可以傳入返回 jsx 元素的函式。比如:
啟動應用。selector
可選,如果沒有selector
引數,會返回乙個返回 jsx 元素的函式。
那麼什麼時候不加selector
?常見場景有測試、node 端、react-native 和 i18n 國際化支援。
比如通過 react-intl 支援國際化的例子:
import from 'react-intl';
...reactdom.render(
intlprovider>, htmlelement);
model 是 dva 中最重要的概念。以下是典型的例子:
namespace: 'todo',
state: ,
reducers: ) ,
},effects: , ) );
},},
subscriptions: ) ) => );
}});
},},
});
model 包含 5 個屬性:
model 的命名空間,同時也是他在全域性 state 上的屬性,只能用字串,不支援通過.
的方式建立多層命名空間。
初始值,優先順序低於傳給dva()
的opts.initialstate
。
比如: initialstate: ,
}); namespace: 'count',
state: 0,
});以 key/value 格式定義 reducer。用於處理同步操作,唯一可以修改state
的地方。由action
觸發。
格式為(state, action) => newstate
或[(state, action) => newstate, enhancer]
。
詳見:
以 key/value 格式定義 effect。用於處理非同步操作和業務邏輯,不直接修改state
。由action
觸發,可以觸發action
,可以和伺服器互動,可以獲取全域性state
的資料等等。
格式為*(action, effects) => void
或[*(action, effects) => void, ]
。
type 型別有:
詳見:格式為(, done) => unlistenfunction
。
使用dva框架的總結
最近的專案是react dva atd webpack的乙個後台專案,剛接觸dva就感覺很喜歡,很簡潔用著很爽。關於使用redux中的一些問題 1 檔案切換問題 redux的專案通常喲啊分為reducer action saga component等等,我們需要在檔案之間來回切換,並且檔案通常是分目...
使用dva框架的總結
最近的專案是react dva atd webpack的乙個後台專案,剛接觸dva就感覺很喜歡,很簡潔用著很爽。關於使用redux中的一些問題 1 檔案切換問題 redux的專案通常喲啊分為reducer action saga component等等,我們需要在檔案之間來回切換,並且檔案通常是分目...
前端基於jquery的UI框架
正在做的乙個專案選擇jquery作為前端js核心庫。然後就想選乙個基於jquery的ui庫,然後悲催的事情發生了。至於為什麼使用jquery,一是因為不想為授權費用,而又不想引起可能法律糾紛 另一方面jquery也是所有最容易上手和流行的js庫。如果ext要用於商用就要付版權費,這個不行 dojo的...