mobx基本概念

看風景就發表於2018-08-19
mobx是一個簡單可擴充套件的狀態管理庫,主要用來管理狀態之間的依賴關係,可以使用在任何狀態管理的場景,並不僅限於react。
結合mobx-react可以用在react中,結合mobx-vue可以用在vue中。mobx的概念與knockout和rxjs中的概念極其相似,
相當於將kouckout中的狀態管理部分獨立出來了。
 
mobx的基本流程如下圖:
1. mobx的基本概念

state 應用的資料,包括領域狀態和檢視狀態

observable 可觀察者,可以被觀察者觀察的資料

observer 觀察者,可以觀察可觀察者的物件,可以接收到可觀察者發生變化時候發出的訊息,並且根據變化做出響應
observer本身是一個函式,也可以以裝飾器的身份出現,將其包裝過的物件變成一個觀察者

derivations 衍生,狀態變化引起的副作用,如一個值的變化或者觸發一個行為

computed 衍生值,狀態發生變化,引起依賴於原始狀態的計算狀態發生變化,本質是一個函式,關注其返回值,computed中不能再次修改狀態

reactions 衍生行為,狀態發生變化,引發某些行為,如IO操作,日誌記錄等,本質是一個函式呼叫

action 修改狀態的函式,本質是一個高階函式,修改狀態可以是不經過action的,但是mobx建議所有狀態的修改儘量在action中,在嚴格模式下,mobx限制只能在action中修改狀態

2. reactions的幾種型別

autorun: 本質是一個高階函式,autorun如其名,首次觀察狀態立即被觸發一次,狀態變化會再次被觸發

autorunAsync: 可以在狀態發生改變一定時間後觸發,有函式防抖的功能,其他與autorun一致

when: 可以設定斷言,當斷言生效時候函式被觸發,並且僅僅觸發一次

reaction: 與autorun類似,函式不會立即執行

3. mobx的最佳實踐

1.reactions一定要命名,不要使用匿名的,有利於在報錯時候顯示準確的資訊

2.狀態修改一定要做action中來做,利於追蹤狀態變化

3.開啟嚴格模式,規範寫法

4.使用裝飾器寫法,簡潔明瞭

5.使用多個store

使用多個 store對觀測資料進行邏輯分組。

一個用於 UI 狀態
一個或多個用於領域狀態
 
參考:https://segmentfault.com/a/1190000015408976