我的愚見:Redux 和 Mobx 區別

一. 關於狀態管理react

它們都有統一維護管理應用狀態的能力;編程

某一狀態只有一個可信數據來源(一般命名爲store,指狀態容器);
操做更新狀態方式統一,而且可控(一般以action方式提供更新狀態的途徑);
支持將store與React組件鏈接,如react-redux,mobx-react;一般使用狀態管理庫後,咱們將React組件從業務上劃分爲兩類:
    容器組件(Container Components):負責處理具體業務和狀態數據,將業務或狀態處理函數傳入展現型組件;
    展現型組件(Presentation Components):負責展現視圖,視圖交互回調內調用傳入的處理函數;

二. 關注點的不一樣redux

1. Redux更多的是遵循Flux模式的一種實現,是一個JavaScript庫,它的關注點在於:
     Action:一個JavaScript對象,描述動做相關信息,主要包含type屬性和payload屬性:
     Reducer:定義應用狀態如何響應不一樣動做(action),如何更新狀態;
     Store:管理action和reducer及其關係的對象,主要提供如下功能:
          1>. 維護應用狀態並支持讀取訪問狀態(getState());
          2>. 支持監聽action的分發,更新狀態(dispatch(action));
          3>. 支持訂閱store的變動(subscribe(listener));
          4>. 支持經過中間件(redux-thunk、redux-saga、redux-promise等)處理異步任務流程
2. Mobx是一個透明函數響應式編程的狀態管理庫,它使得狀態管理簡單可伸縮,它的關注點在於:
    Action:定義改變狀態的動做函數,包括如何變動狀態;
    Store:集中管理模塊狀態(State)和動做(action);
    Derivation(衍生):從應用狀態中派生而出,且沒有任何其餘影響的數據,咱們稱爲derivation(衍生),衍生在如下狀況下存在:
       1>. 用戶界面;
       2>. 衍生數據, 衍生主要有兩種:
        Computed Values(計算值):計算值老是可使用純函數(pure function)從當前可觀察狀態中獲取;
        Reactions(反應):反應指狀態變動時須要自動發生的反作用,這種須要實現其讀寫操做;

三. 設計思想的不一樣promise

Redux 更多的是遵循函數式編程思想
Mobx 設計更多偏向於面向對象編程和響應式編程,一般將狀態包裝成可觀察對象,一旦狀態對象變動,就能自動得到更新。

四. 對store管理的不一樣異步

Redux將全部共享的數據集中在一個大的store中,統一管理
Mobx是按模塊將狀態劃分出多個獨立的store進行管理

五. 數據可變性的不一樣函數式編程

Redux強調的是對象的不可變性,不能直接操做狀態對象,而是在原來狀態對象的基礎上返回一個新的狀態對象,最後返回應用的上一狀態
Mobx中能夠直接使用新值更新狀態對象

六. 學習成本方面函數

Redux 較繁瑣,流程較多,須要配置,建立store,編寫reducer,action,若是涉及異步任務,還須要引入中間件
Mobx 流程相對就簡單不少,根據文檔上手也比較快
相關文章
相關標籤/搜索