「前端架構」Redux vs.MobX的權威指南

2021-03-02 超級架構師

大型應用程式的前端管理是最難解決的問題之一。雖然有幾種方法可以解決狀態管理問題,但Redux和MobX是兩個最流行的外部庫,用於解決前端應用程式中的狀態管理問題。在這篇文章中,我們將研究每個庫以及它們是如何匹配的。

本文假設您對web應用程式中的狀態管理工作有一個基本的了解。普通JavaScript和Redux框架都適用於普通或不可知的框架。

Redux

Redux是一個流行的狀態管理解決方案,它結合了Flux和函數式編程概念。Redux的一些核心原則是:

Redux只有一個存儲——單一來源的真相

存儲區中的狀態是不可變的

操作會調用對存儲的更改

Reducers(減速器)更新狀態

MobX

MobX是一個狀態管理解決方案,可以幫助管理應用程式中的本地狀態。

MobX的一些核心原則是:

現在讓我們比較Redux和MobX的一些關鍵特性,看看哪些特性更適合您的需求。

人氣

在開始學習Redux或MobX之前,讓我們看看哪個更受歡迎。

看看下面的谷歌趨勢圖。截至2019年4月,相比MobX,Redux在谷歌上似乎是一個更受歡迎和搜索的概念。

為了深入了解他們的受歡迎因素,讓我們看看2018年JavaScript現狀調查。它發布了過去三年裡Redux和MobX在開發者中的受歡迎程度的數據。

Redux

Mobx

在過去的幾年裡,Redux已經獲得了大量的人氣,並且已經成為狀態管理的最佳解決方案。雖然MobX不像Redux那麼受歡迎,但它也有自己的優勢。

獲獎者:Redux

學習曲線Redux

開發人員對Redux的普遍看法是它不容易學習。2018年JavaScript現狀調查分析了Redux最不受歡迎的方面。在這裡,開發人員投票認為他們不喜歡Redux的複雜性和它帶來的艱苦的學習曲線。

它需要一些時間來理解它的模式和範例。它是通量體系結構和函數式編程概念的結合。如果您是一個函數式程式設計師,您可能會發現掌握Redux更容易,而如果您來自面向對象編程背景,Redux代碼最初看起來很複雜而且很難理解。

學習Redux還意味著您需要了解像Thunk和Saga這樣的Redux中間件,這會增加更多的學習內容。

Mobx

眾所周知,與Redux相比,MobX更容易掌握。大多數JavaScript開發人員都精通面向對象編程,這使得學習MobX變得簡單。另外,MobX中有很多事情是在幕後完成的,為開發人員創造了更好的學習體驗。您不必擔心狀態的規範化或實現類似Thunks的概念。由於已經內置了抽象,因此編寫的代碼更少。

獲獎者:MobX

存儲數據-單個存儲與多個存儲

存儲區是我們存儲本地數據的地方。它保存整個應用程式的狀態。JSON應用程式的狀態存儲中通常包含一個巨大的對象。

Redux

在Redux,只有一家商店,它是唯一的真理來源。存儲中的狀態是不可變的,這使得我們更容易知道在哪裡可以找到數據/狀態。在Redux中,雖然有一個巨大的JSON對象來表示存儲,但是您可以始終將代碼拆分為多個reducer。這樣,就可以用多個reducer在邏輯上分離關注點。對於許多開發人員來說,這是一種更直觀的方法,因為他們可以始終引用應用程式狀態的單個存儲區,並且不存在與當前數據狀態相關的重複或混淆的可能性。

Mobx

另一方面,MobX允許多個商店。您可以在邏輯上分離存儲區,因此應用程式的所有狀態都不在一個存儲區中。大多數應用程式設計為至少有兩個存儲區:一個用於UI狀態,一個或多個用於域狀態。以這種方式分離存儲區的好處是,您也可以在其他應用程式中重用該域。UI存儲將特定於當前應用程式。

獲獎者:Redux

這個類別的贏家是主觀的;這取決於開發者的偏好。我個人喜歡將應用程式的整個狀態存儲在單個存儲中的想法。這有助於我把同一個地方稱為真理的唯一來源。有些人可能會說多家商店對他們更有效,更喜歡MobX。

數據結構Redux

Redux使用普通JavaScript對象作為數據結構來存儲狀態。使用Redux時,必須手動跟蹤更新。在需要維護大量狀態的應用程式中,這可能更困難。

Mobx

MobX使用可觀測數據。這有助於通過隱式訂閱自動跟蹤更改。在MobX中,更新是自動跟蹤的,因此對開發人員來說更容易。

獲獎者:MobX

純與不純Redux

在Redux中,存儲中的狀態是不可變的,這意味著所有狀態都是只讀的。Redux中的操作可以調用對狀態的更改,reducer可以用新的狀態替換以前的狀態。這是Redux的核心原則之一。

下面是純函數的一個簡單示例:

function sumOfNumbers(a, b) { return a + b; }

函數將始終返回相同的輸出,給定相同的輸入。它沒有任何副作用或來自外界的影響。

Redux函數使用以下模式編寫。reducer是接受一個狀態和動作並返回一個新狀態的純函數。

function(state, action) => newState

這讓Redux變得純潔。如果您有興趣了解更多關於純函數以及它們在Redux中如何操作的信息,您可以閱讀本文以獲得更好的理解。這是Redux最好的特性之一。

Mobx

在MobX中,狀態是可變的,這意味著您可以簡單地用新值更新狀態。這讓黑幫變得不純潔。不純函數很難測試和維護,因為它們並不總是返回可預測的輸出。

獲獎者:Redux

由於Redux存儲是純的,因此更容易預測,並且很容易恢復狀態更新。在MobX的情況下,如果操作不當,狀態更新可能會使調試更加困難。

樣板代碼Redux

關於Redux最大的抱怨之一是它附帶的大量樣板代碼。當您將React與Redux集成時,會產生更多的樣板代碼。這是因為Redux本質上是顯式的,很多功能都必須顯式地編碼。

Mobx

MobX更隱式,不需要很多特殊工具。與Redux相比,它的樣板代碼要少得多。這使得MobX更容易學習和設置。

獲獎者:MobX

開發者社區

對於開發人員社區,Redux輕而易舉地贏得了勝利。Redux附帶了reduxdev工具,供成千上萬的開發人員使用。它為調試Redux代碼提供了驚人的支持。

MobX還提供開發人員工具,但它們沒有Redux提供的相同質量的調試支持。

GitHub統計數據很好地表明了兩個庫的社區參與度。Redux擁有約48k星,超過672位投稿人。另一方面,MobX擁有大約1.9萬星和155名投稿人。

如果我們看看npm的下載量,Redux是遙遙領先的。Redux平均每周下載300萬次,MobX平均每周下載25.4萬次。這表明Redux被廣泛採用。

獲獎者:Redux

可擴展性

由於Redux更加固執己見,並且期望reducer函數是純的,因此它比MobX更容易擴展。Redux的固執己見和純粹的特性使得應用程式具有可伸縮性。

純函數更容易測試,因為它們是可預測的和簡單的。這就產生了可伸縮的可維護代碼。這是選擇Redux而不是MobX的核心優勢之一。

獲獎者:Redux

結論

好吧,判決結果如何?基於開發人員社區、流行度和可伸縮性,Redux的性能優於MobX。但是,如果你想快速跟上速度,用更少的樣板代碼構建簡單的應用程式,MobX可能是你的朋友。

本文:http://jiagoushi.pro/node/1281

討論:請加入知識星球【首席架構師圈】或者小號【jiagoushi_pro】或者QQ群【1110777】

微信公眾號【首席架構師智庫】
適合物業仔細反覆閱讀。
精彩圖文詳解架構方法論,架構實踐,技術原理,技術趨勢。
我們在等你,趕快掃描關注吧。
微信小號50000人社區,激烈深度討論:企業架構,雲計算,大數據,數據科學,物聯網,人工智慧,安全,全棧開發,DevOps,數位化.

QQ群深度交流企業架構,業務架構,應用架構,數據架構,技術架構,集成架構,安全架構。以及大數據,雲計算,物聯網,人工智慧等各種新興技術。

視頻號【首席架構師智庫】
1分鐘快速了解架構相關的基本概念,模型,方法,經驗。
每天1分鐘,架構心中熟。

知識星球向大咖提問,近距離接觸,或者獲得私密資料分享。知識星球【首席架構師圈】微信圈子志趣相投的同好交流。微信圈子【首席架構師圈】喜馬拉雅路上或者車上了解最新黑科技資訊,架構心得。【智能時刻,架構君和你聊黑科技】知識星球認識更多朋友,職場和技術閒聊。知識星球【職場和技術】

相關焦點

  • Vuex、Flux、Redux、Redux-saga、Dva、MobX
    在聊之前,大家要始終記得一句話:一切前端概念,都是紙老虎。不管是Vue,還是 React,都需要管理狀態(state),比如組件之間都有共享狀態的需要。什麼是共享狀態?比如一個組件需要使用另一個組件的狀態,或者一個組件需要改變另一個組件的狀態,都是共享狀態。
  • React 狀態管理庫的battle (setState/useState vs Redux vs Mobx)
    原文連結:https://dev.to/mpodlasin/my-thoughts-on-endless-battle-of-react-state-management-libraries-setstate-usestate-vs-redux-vs-mobx
  • 「全棧之路」Web前端開發的後端指南
    另外一臺機器(代號B)並不提供線上服務,但會實時的將「主機」的數據同步過來,稱為「備機」。一旦「主機」出了故障,通過人工的方式,手動的將「主機」踢下線,將「備機」改為「主機」來繼續提供服務。這個架構的優缺點都很明顯,優點就是幾乎不需要做什麼開發改造,各類資料庫就支持這種模式,部署維護起來也簡單,並沒有引入額外的系統複雜度和瓶頸。
  • 學習 redux 源碼整體架構,深入理解 redux 及其中間件原理
    這是學習源碼整體架構系列第八篇。整體架構這詞語好像有點大,姑且就算是源碼整體結構吧,主要就是學習是代碼整體結構,不深究其他不是主線的具體函數的實現。本篇文章學習的是實際倉庫的代碼。要是有人說到怎麼讀源碼,正在讀文章的你能推薦我的源碼系列文章,那真是太好了。
  • 百度、有贊、阿里前端面試總結
    考慮到團隊每一個前端的技術棧可能不一致,這個時候我可能選擇微前端架構,讓每個人負責的模塊可以單獨開發,單獨部署,單獨回滾,不依賴於其他項目模塊,在儘可能的情況下節約團隊成員之間的學習成本,當然這肯定也有缺點,那就是每個模塊都需要一個前端項目,單獨部署,單獨回滾無疑也加大了運維成本。
  • 「乾貨」從菜鳥到大神,前端學習書籍推薦
    前端易學易懂,屬於一個人傻錢多速度來的行業,隨著移動網際網路的日益興起,it行業對於前端的需求也在不斷的提高,那麼從前端小白修煉成為前端大神的這個過程之中,一些必備的枕邊書也是必不可少的。二、《CSS權威指南》內容介紹:《CSS權威指南》通過諸多示例,詳細講解了如何做到僅在一處建立樣式表就能創建或修改整個網站的外觀,以及如何得到html力不能及的更豐富的表現效果。同時展示了如何遵循css最新規範(css2和css2.1)將層疊樣式表的方方面面應用於實踐。
  • Redux異步方案選型
    推廣 | 令人窒息的獎品等你―2016最權威的全球開發者調研 作為react社區最熱門的狀態管理框架,相信很多人都準備甚至正在使用Redux。
  • 【THE LAST TIME】從 Redux 源碼中學習它的範式
    筆者文章集合詳見:GitHub 地址:Nealyang/personalBlogTLT往期前言「範式」概念是庫恩範式理論的核心,而範式從本質上講是一種理論體系。庫恩指出:「按既定的用法,範式就是一種公認的模型或模式」。而學習 Redux,也並非它的源碼有多麼複雜,而是他狀態管理的思想,著實值得我們學習。講真,標題真的是不好取,因為本文是我寫的 redux 的下一篇。兩篇湊到一起,才是完整的 Redux。
  • React-redux數據傳遞是如何實現的?
    主要內容React數據傳遞reduxReact-redux其他學習目標第一節 react數據傳遞react 中組件之間數據傳遞1. 父傳子2. 子傳父(狀態提升)3.redux能統一管理數據,只要redux中的數據發生改變了,所有使用redux中數據的地方都會改變。redux有自己的一套操作標準。2. 使用1. 安裝:2. 三大原則1.單一數據源整個應用的 state 被儲存在一棵 object tree 中,並且這個 object tree 只存在於唯一一個 store 中。
  • 從零開始手寫 redux
    ,提升前端技能)作者: 前端宇宙 公號 / 劉小夕 (本文來自作者投稿)寫在開始之前:作為一個記性不太好的人,學完的東西總是很容易忘記,因此需要反反覆覆得去學習和理解,堅持記錄是一個很好的習慣,也有助於後期自己回顧。
  • 完全理解 redux(從零實現一個 redux)
    花了很長時間熟悉 redux,慢慢的發現它其實真的很簡單。本章不會把 redux 的各種概念,名詞解釋一遍,這樣和其他教程沒有任何區別,沒有太大意義。我會帶大家從零實現一個完整的 redux,讓大家知其然,知其所以然。開始前,你必須知道一些事情:redux 和 react 沒有關係,redux 可以用在任何框架中,忘掉 react。
  • 前端架構師是打雜的麼?前端架構師的核心工作是什麼?
    , 他理解當時他所做的前端架構主要解決的是大數量頁面生成的問題, 當時感觸不深.在今天之前, 我對前端架構的理解一直是廣義的, 即架構本身要解決的就是複雜性, 將複雜的東西簡化, 以便更好的維護, 前端也脫離不開這個範疇, 但是今天因為要寫轉正ppt在構思腦圖的時候, 我突然意識到前端架構其實是有更明確地含義, 並且在這些年, 我們這些在不同領域從事前端架構工作的架構師都有自己的一些理解
  • Equality vs. Equity |「同等」和「公平」的區別是什麼?
    一部分父母或許從未在言語上傳達過這樣的信息給兒女,但他們總是會把好東西(包括物質以及優良的道德觀念)給兒女,以他們擁有的、熟悉的愛的方式(或愛的語言)來愛孩子們,也許是通過 Acts of Service「服務的行動」、Quality Time「精心的時刻」、Words of Affirmation「肯定的言辭」、Giving Gifts「給予禮物」和Phycial Touch「肢體接觸」。
  • 「英超」賽事分析:南安普頓vs熱刺
    聯賽:英超比賽隊伍:南安普頓vs熱刺比賽時間:9-20 19:00北京時間9月20號晚上「英超」南安普頓vs熱刺南安普頓「英超」南安普頓vs熱刺9月12日星期六,南安普頓以1比0輸給了水晶宮。這是南安普頓新賽季的第一場比賽,而且比賽沒有按照計劃進行。
  • redux原理解析,看這篇就夠了
    在實際開發中,常搭配React + React-redux使用。這代表了目前前端開發的一個基本理念,數據和視圖的分離。redux應運而生,當然還有其他的一些狀態管理庫,如Flux、Elm等,當然,我們這裡只對redux進行解析。
  • 009 | 快速入門Web前端開發的正確姿勢
    PS:今天再免費放出一篇專欄文章,另外,小專欄已支持分享分成功能,你可以點擊文章結尾的「閱讀原文」,點擊專欄右上角的「小紅包」按鈕,可以看到專屬於你自己的分享連結,有人通過你這個專屬連結訂閱專欄的話,則你可以得到訂閱金10%的分成。入門標準很簡單,就一條:達到能參與 Web 前端實際項目的開發水平。
  • 從 Redux 設計理念到源碼分析
    至於手寫,推薦磚家大佬的:完全理解 redux(從零實現一個 redux)ReduxRedux 並不是什麼特別 Giao 的技術,但是其理念真的提的特別好。說透了,它就是一個提供了 setter、getter 的大閉包,。外加一個 pubSub。。。
  • 權威出爐!2019英國「金融時報」全球管理學碩士排行榜!
    2019年10月27日,英國《金融時報》(FT)公布了2019年度全球管理學碩士排行榜,這是該細分領域最權威的世界排名之一!一起看看吧!美國留學vs歐洲留學vs英國留學,讀博選擇哪裡更靠譜?美國商科三大專業「會計、金融、市場營銷」留學費用知多少?
  • 微前端架構初探以及我的前端技術盤點
    微前端架構概念的誕生及應用對於提供複雜應用服務的企業來說顯然是一種機遇, 同樣也是一種挑戰.本文主要就微前端架構的概念和實現方案做一個總結和復盤,並且通過一個實際案例來實踐微前端架構,希望能對同樣有此需求的朋友們提供一些幫助和思路.