歡迎您開始 @medux 之旅,建議您依次閱讀如下 4 篇文章,這將耗費您大約 30 分鐘。javascript
第 4 篇:medux 數據流vue
-- Github 地址 ---java
由於 Medux 基於 Redux,因此部分數據流與 Redux 很類似,好比:react
...
await this.dispatch(this.action.searchList());
this.dispatch(this.action.showPop());
複製代碼
你只需在定義 Effect 的裝飾器中加入可控的參數既可注入其 loading 狀態到 moduleState 中:git
// loadingForGroupName 注入加載狀態的分組key,默認爲global,若是爲null表示不注入加載狀態
// loadingForModuleName 可將loading狀態合併注入到其餘module,默認爲入口主模塊
function effect(loadingForGroupName?: string | null, loadingForModuleName?: string)
// 例如
@effect('global')
public async login(username:string, password:string){
...
}
複製代碼
除了 loading 狀態,你還能夠直接編寫 effect 執行先後的鉤子:github
function logger(before: (action: Action, moduleName: string, promiseResult: Promise<any>) => void, after: null | ((status: 'Rejected' | 'Resolved', beforeResult: any, effectResult: any) => void));
複製代碼
reducer 或 effect 咱們統稱爲 ActionHandler,當執行 store.dispatch(action)時,會觸發一個目標 ActionHandler 的執行,咱們稱之爲主ActionHandler
。除了主 ActionHandler,還能夠存在一系列從ActionHandler
來配合執行,它們能夠屬於不一樣的 module,因此一般用來解決 module 之間的協做。web
從本文頂部的 medux 數據流示意圖中看出,藍色的 Action 彷佛像一條總線穿透各個 module,它的 Event 性質讓整個模塊變得鬆散起來typescript
一個 Action 被 dispatch 可能引發一系列 reducer 和 effect 執行,那麼它們的執行順序是怎樣的呢?redux
主ActionHandler
老是先執行從ActionHandler
默認是按註冊順序,可是你能夠設置 Action.priority 來強制干預interface Action {
type: string;
priority?: string[]; //執行優先級
payload?: any[];
}
複製代碼
當 actionHandler 執行出錯時,medux 會自動 dispatch 一個 type 爲medux.Error
的新 Action,你能夠 handler 這個 ErrorAction,並對錯誤進行處理:api
View 本質上就是一個 Component,可是 View 用來展現業務,Component 用來展現交互。從本文最開始的 Medux 數據流示意圖中看出:
const RoleSelector = loadView('adminRole', 'Selector');
複製代碼
框架會自動監聽路由的變化,並將路由信息解析爲 RouteState,而後:
dispatch medux.RouteChange
Action 將其注入 Redux 一級子節點 route 中dispatch moduleName.RouteParams
Action 將其注入相應的 moduleState喜歡 vue 或 mobx 的朋友可能會問,medux 是要求可變數據仍是不可變數據?
雖然 medux 是基於 redux 的,但本着實用至上的原則,並不要求嚴格遵循 redux 模型,它是另外一個 flux 框架。
medux 框架內部會使用 ImmutableData 來自動生成並管理 state 及其 1 級節點,對於這個內置數據結構一般你也無需干預。而對於次級的 moduleState 你能夠將它定義爲 一個 MutableData,而後直接在 reducer 中修改 state 並返回它,儘管這有違 reducer 的本意,但這是對接 MutableData 最簡單靈活的方案。
@medux/react-web-router:整合封裝了@medux/core、@medux/web、@medux/route-plan-a、@medux/react, 是 web 環境下開發 react 的開箱即用框架
medux-react-admin:基於@medux/react-web-router
和最新的ANTD 4.x
開發的通用後臺管理系統,除了演示 medux 怎麼使用,它還創造了很多獨特的理念