這篇文章主要用於學習和上手mobx, 主要有如下內容:javascript
Mobx中文文檔: suprise.gitbooks.io/mobx-cn/con… Mobx官網: cn.mobx.js.org/ Mobx概念: cn.mobx.js.org/intro/conce…html
mobx經過透明的函數響應式編程(transparently applying functional reactive programming - TFRP)使得狀態管理變得簡單和可擴展。MobX背後的哲學很簡單: 任何源自應用狀態的東西都應該自動地得到。
React 和 MobX 是一對強力組合。React 經過提供機制把應用狀態轉換爲可渲染組件樹並對其進行渲染。而MobX提供機制來存儲和更新應用狀態供 React 使用。 java
import { observable } from "mobx";
class Todo {
id = Math.random();
@observable title = "";
@observable finished = false;
}
複製代碼
(2)非註解方式 javascript import { decorate, observable } from "mobx"; class Todo { id = Math.random(); title = ""; finished = false; } decorate(Todo, { title: observable, finished: observable })
react
做用: 當相關數據變化後,與其相關的數據值若是使用了@computed
則會自動更新。git
class TodoList {
@observable todos = [];
@computed get unfinishedTodoCount() {
return this.todos.filter(todo => !todo.finished).length;
}
}
複製代碼
當todos
數組變化後,unfinishedTodoCount
獲得的結果也會自動變化。只有在須要他們的時候,他們纔會自動更新。
github
Reactions 和計算值很像,但它不是產生一個新的值,而是會產生一些反作用,reactions 在 響應式編程和命令式編程之間創建溝通的橋樑。 使用autorun、reaction 和 when 函數便可簡單的建立自定義 reactions,以知足你的具體場景。 簡而言之:狀態改變後,觸發一些你想觸發的動做,好比打印日誌等,就叫作Reactions(反應)編程
任何 源自狀態而且不會再有任何進一步的相互做用的東西就是衍生。 衍生以多種形式存在:後端
MobX 區分了兩種類型的衍生:api
黃金法則: 若是你想建立一個基於當前狀態的值時,請使用 computed
數組
動做
改變狀態
,而狀態
的改變會更新全部受影響的視圖
。
衍生
默認都是同步更新
。這意味着例如動做能夠在改變狀態以後直接能夠安全地檢查計算值
。計算值
是延遲更新的。任何不在使用狀態的計算值將不會更新
,直到須要它進行反作用(I / O)操做時。 若是視圖再也不使用,那麼它會自動被垃圾回收。估計上面會看的一臉懵逼,看個demo就理解了:Electron-react-mobx
有問題歡迎加羣溝通哦: