2017-04-10 19 views

回答

5

MobX和Redux嘗試使用不同的方法解決類似的問題。主要目標是; JavaScript應用程序中的狀態管理。

這裏的核心問題是通過您之間的任何圖層和傳輸機制,在主數據源和用戶界面之間實現信息的有效和最佳同步。

@saiki link已經寫了一個很好的比較分析,其中包含豐富的示例,這有助於您理解使用MobX vs Redux編寫代碼時的樣子。

MobX涵蓋通常稱爲聲明MVVM的方法:

enter image description here

Redux的涵蓋功能的編程和參照透明度:

狀態是一個普通的javascript對象。你絕對不要直接改變它,而應該在應用程序中發生一些事情(導致動作分派)通過純函數派生一個新的更新狀態。 enter image description here

更多的細節,你可以去通過這個例子byExample

9

我會貼上他們的方法I wrote in a Reddit comment摘要:

  • 終極版在很大程度上受到函數式編程原則的影響:

    • 它鼓勵使用的「純粹」功能,希望你能夠「不變地」處理你的數據(即,複製和修改副本,不要直接更新原始值),並專注於顯式定義數據流和更新邏輯。
    • 它爲您提供了諸如執行「時間旅行調試」(在個人更新到您的狀態之間來回切換或從客戶崩潰報告中加載應用程序狀態副本以查看發生了什麼的功能)。
    • 習慣性Redux代碼「規範化」嵌套或關係對象,如數據庫。每個項目都在一個地方定義,其他部分將僅通過ID引用該項目,稍後留下查找
    • 通常的抱怨是代碼太多,並且典型的Redux用法涉及字符串常量和開關語句。
    • 當您想要通過應用程序明確跟蹤數據流時使用它,或者想要確切地查看您的應用程序在特定狀態下結束的原因。
  • MobX由面向對象的編程和反應式編程原則的影響:

    • 它允許您定義特定的數據爲「可觀察的」,然後包裝這些並跟蹤任何更改對這些數據作出自動更新,並自動更新觀察數據的任何其他代碼。
    • 它鼓勵使用標準的變異代碼,如someObject.someField = someValue和someArray.push(someValue),其中真正的更新邏輯在MobX內部隱藏。
    • 慣用MobX代碼使您的數據以嵌套形式,並保持從一個對象直接引用到另一
    • 一個可能的抱怨是,你沒有看到儘可能多的時間和方式您的數據正在更新的,它可能通過應用程序難以跟蹤
    • 當您更喜歡OOP風格而非功能時,在您希望通過類而不是普通函數表示和操縱數據時使用它,或者希望編寫較少顯式更新邏輯並讓庫執行管理事物的工作。

對於更深入的比較,我可以從高度2017年ReactConf建議Preethi Kasireddy的談話MobX vs Redux: Comparing the Opposing Paradigms,和Robin Wieruch的文章Redux or MobX: An attempt to dissolve the confusion。我也有一個number of other comparisons collected in my React/Redux links list

+0

這正是我所追求的。感謝您的好評! –

相關問題