mobx的學習筆記

一、定義

mobx通過透明的函數(shù)響應式編程,使得狀態(tài)管理變得簡單和可擴展:

任何源于應用狀態(tài)的東西都應該自動地獲得。(其中包括UI、數(shù)據(jù)序列化、服務器通訊等等)

React和Mobx是一對強力組合。
React和Mobx都提供了最優(yōu)和獨特的解決方案。React提供了優(yōu)化UI渲染的機制,這種機制就是通過使用虛擬DOM來減少昂貴的DOM變化的數(shù)量。Mobx提供了優(yōu)化應用狀態(tài)與React組件同步的機制,這種機制就是使用響應式虛擬依賴狀態(tài)圖表,它只有在真正需要的時候才更新并且永遠保持最新。

二、observable 可觀察的狀態(tài)

mobx為現(xiàn)有的數(shù)據(jù)結(jié)構(gòu)添加可觀察的功能時,通過使用@observable裝飾器來給你的類屬性添加注釋就可以簡單地完成。

import { observable } frorm 'mobx';
 
class Todo {
  id = Math.random();
  @observable title = "";
  @observable finitshed = false;
 }

使用observable很像把對象的屬性變成excel的單元格,但和單元格不同的是,這些值不只是原始值,還可以是引用值,比如對象和數(shù)組。

如果你的環(huán)境不支持裝飾器語法,也不必擔心,mobx可以通過decorate工具在不支持裝飾器語法的情況下使用。(但是多數(shù)mobx用戶更喜歡裝飾器語法,因為更簡潔)

例如上面那段代碼,ES5的版本應該是:

import { decorate, observable } from "mobx";

class Todo {
  id = Math.random();
  title = "";
  finished = false;
}

decorate(Todo, {
  title: observable,
  finished: observable
 })

三、computed 計算值

使用mobx,你可以定義在相關(guān)數(shù)據(jù)發(fā)生變化時自動更新的值。通過@computed裝飾器或者利用(extend)Observable時調(diào)用的getter / setter函數(shù)來進行使用。

class Todo {
  @observable todos = [];
  @computed get unfinishedTodoCount() {
  return this.todos.filter(todo => !todo.finished).length;
}
}

mobx會對在執(zhí)行跟蹤函數(shù)期間讀取的任何現(xiàn)有的可觀察屬性做出反應。

四、優(yōu)點

  • 簡單且可擴展
    Mobx是狀態(tài)管理庫中侵入性最小的之一。這使得mobx的方法不但簡單,而且可擴展性也非常好。
  • 使用類和真正的引用
    使用mobx不需要使用數(shù)據(jù)標準化。這使得十分適合那些異常復雜的領(lǐng)域模型。
  • 保證參照完整性
    因為數(shù)據(jù)不需要標準化,所以mobx會自動跟蹤狀態(tài)和衍生之間的關(guān)系。
  • 更簡單的actions更便于維護
    使用mobx修改狀態(tài)是非常簡單的,你只需要簡單的寫出你的目的,mobx會替你處理好剩下的事情。
  • 細粒度的可觀測性是高效的
    mobx構(gòu)建應用中所有衍生的圖形,以找到保持最新狀態(tài)所需的重新計算的最少次數(shù)?!把苌磺小被蛟S聽上去開銷很昂貴,但mobx構(gòu)建虛擬衍生圖保持衍生于狀態(tài)同步所需的沖計算的數(shù)量最小化。

簡單來說,是因為mobx會在數(shù)據(jù)上建立更細粒度的"監(jiān)聽器",而不是通過程序來控制。
其次,mobx看到衍生之間的因果關(guān)系。因此它可以為衍生排序,使得衍生不會運行多次或引入缺陷。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容