摘要:它是由一個非常聰明的人開發的,用來緩解在單頁面應用中管理狀態的問題。的問題沒有一種適合所有場景的完美工具。為設計的是世界的另一個新增內容,但目前僅適用于。這將導致最后期限延長,并且留下更多需要我們維護的代碼。
原文:The Problems with Redux: Can React, MobX, and Realm save us?
作者:Erich Reich
首先,我不討厭 Redux。它是由一個 非常聰明的人 開發的,用來緩解在單頁面應用中管理狀態的問題。而且,確實解決了這個問題。你可以使用 Redux 將狀態從高層的 store 連接到每個組件,只 map 該組件需要用到的狀態。
在本文中,我想分享我們為客戶創建移動應用的一些經驗。在 Quantum Mob,我們主要的 webapps 是由React 編寫的,而我們的移動技術棧用的是由 React Native。React Native 允許在 Android / iOS 之間共享大部分代碼,并且從產品的網頁版本重用代碼變得更容易,因為它跟普通的 React 很相似。
Redux 的問題沒有一種適合所有場景的完美工具。即使你喜歡某種東西,也要清楚客觀地去看待它,特別是那些賣力宣傳的東西。你使用它只是因為這很酷,還是因為它是最正確的選擇?如果一個東西要求得太多,那么它的宣傳根本對不起其本身的價值。
不用懷疑我的話,Dan Abramov 以作者身份寫了關于他對 Redux 的看法,試圖讓人們停下來考慮,Redux 是否真正適合你的項目。
如果你在用 “Redux 方式” 做事的時候感到壓力,這表明你或你的團隊可能過于看重它了。這只是你們工具箱中的一個工具,一個瘋狂的實驗。-Dan Abramov
隨著 npm,Node 以及構建工具(grunt,gulp,webpack ...)的出現,在每個項目中需要使用的庫和框架在呈爆炸式增長。
你的項目需要處理日期嗎?為什么不使用 MomentJs?你要處理數組嗎?再加上像 lodash 或 Ramda。如果你不使用 Babel 和 Axios,以及一個好的 CSS 框架,我不能想象那將會怎樣。必須確保編譯你的同構應用,即使這只是個 Hello World 應用。
Redux 引入一些概念,你需要花時間去學習它們。將需要翻閱文檔并瀏覽教程,因為不只是簡單調用保存,然后再獲取數據那么簡單。
要使用 Redux 的話,需要設計好 store,創建多個 reducer 并將其組合在一起。然后,使用 connect 或者其他什么,為每個需要跟 store 交互的組件配置 mapStateToProps 和 mapDispatchToProps。
對于每個組件,都有一個用于 JavaScript 的文件,一個用于樣式的文件,另一個用于 JSX。Redux 將這些東西與 action 和 reducer 文件相結合,另一個將其全部整合在一起。確實這樣很 Redux,但如果你只想某個地方使用怎么辦?對于簡單的例子,引入像 Redux 這樣強大的工具其實是過度工程的。
備選方案 局部狀態(local state)Redux 的另一種替代方法是保持簡單,使用組件的局部狀態。意思是保持最開始時候簡單的架構就好,只有在需要時才添加 redux。容易吧?
以下是 Dan 的一個 很好的例子,說明如何將一個簡單的計數器在不使用 Redux 的情況重構為 Redux 風格的。看看他的文章,寫得很好,他是這個話題的權威。
MobXMobX 比 Redux 更新,現在肯定有很多討論。MobX 承諾的是提供 Redux 的所有功能,但是更少的樣板代碼。這個缺點當然是微不足道的,不應該期望它與 Redux 具有相同的控制級別。
MobX 是如何工作的?你可以創建想要 store 的數據模型作為一個 class,并將使用 @observable 裝飾器添加到 MobX 管理的地方,而不是把重點放在改變和 reduce 的細節上。
另一件事是,你的對象不必像 Redux 那樣進行歸一化處理。這在某些情況下可能是件好事,而在其他情況下也可能是件壞事。例如,有一個很大的數組,在通過它搜索某個值的時候可能會遇到性能問題,需要認識到這一點。
如果你想快速了解一下 MobX,可以從這個與 Redux 比較的4分鐘的視頻開始。
Youtube 上的視頻:Understanding MobX vs Redux
如果你喜歡 MobX 官方的說法,請查看他們的 “十分鐘介紹”。如果希望看到一個更客觀的觀點,這里有一個開發者使用 MobX 示例 。
為 React Native 設計的 RealmRealm 是 React 世界的另一個新增內容,但目前僅適用于 React Native。如果你正在制作移動應用,那絕對值得一看。除了存儲和管理你的域數據之外,Realm 還增加了數個與服務器同步的數據,離線支持和加密功能。
為了幫助了解使用 Realm 的理由,他們提出了一個可以快速開始的真實世界的例子。移動應用程序通常執行多次搜索,從而本地存儲數據,以避免額外調用影響性能,并提供更好的用戶體驗。
Youtube 上的視頻:Realm
應該將 Realm 視為直接集成到應用程序中的一個數據庫。能夠提供很好的速度,因為處理的對象引用與數據庫具有相同的引用,并將其保存到本地存儲,因此任何更改或搜索都不會被序列化或發送到任何地方。
結論沒有任何工具對于每一種情況都是完美的,并不建議徹底放棄 Redux。Redux 很棒,但隨之而來的是創建附加的樣板代碼。這將導致最后期限延長,并且留下更多需要我們維護的代碼。
在某些組件上使用局部狀態是很合適的,如果復雜性發生變化,也可以很容易地使用 Redux 重構。
雖然 MobX 和 Realm 不是作為狀態容器而設計的,但它們可以輕松管理大部分數據。強烈建議試試這兩個庫,看看它們是否適合你的項目。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/88605.html
摘要:知乎專欄前端給不了解前端的同學講前端掘金前端夠得到安全跨站請求偽造掘金前端面試問題持續更新掘金向核心貢獻代碼的六個步驟基于的仿音樂移動端個人文章用構建組件網易嚴選感受開發已完結掘金英文 2017-09-23 前端日報 精選 [譯] 網絡現狀:性能提升指南前端夠得到Web安全3--點擊劫持/UI-覆蓋攻擊React, Jest, Flow, Immutable.js將改用MIT開源協議N...
摘要:我現在寫的這些是為了解決和這兩個狀態管理庫之間的困惑。這甚至是危險的,因為這部分人將無法體驗和這些庫所要解決的問題。這肯定是要第一時間解決的問題。函數式編程是不斷上升的范式,但對于大部分開發者來說是新奇的。規模持續增長的應 原文地址:Redux or MobX: An attempt to dissolve the Confusion 原文作者:rwieruch 我在去年大量的使用...
摘要:希望大家在這浮夸的前端圈里,保持冷靜,堅持每天花分鐘來學習與思考。 今天的React題沒有太多的故事…… 半個月前出了248個Vue的知識點,受到很多朋友的關注,都強烈要求再出多些React相前的面試題,受到大家的邀請,我又找了20多個React的使用者,他們給出了328道React的面試題,由我整理好發給大家,同時發布在了前端面試每日3+1的React專題,希望對大家有所幫助,同時大...
摘要:面試官比較著急了,跟我溝通的時候,我才知道返回值不一定非要跟原生的一樣。騰訊一面平常開發怎么設計組件的。總結騰訊面試的感覺就是,沒有那么正式,都是部門的技術直接聯系的你,然后二面就是部門負責人了,決定了是否入職。 引入 面試過去了這么久,把八月份面試題和總結發一下吧,雖然年底大家可能都不換工作~ 還是可以看看的。 關于面試,引用葉老濕的一句話。你的簡歷是自己工作的答卷,項目經歷是你給面...
摘要:需要注意的是,在中,需要把數據聲明為。同時還提供了運行時的類型安全檢查。在利用了,使異步操作可以在一個函數內完成并且可以被追蹤。例如在中,數組并不是一個,而是一個類的對象,這是為了能監聽到數據下標的賦值。 Redux是一個數據管理層,被廣泛用于管理復雜應用的數據。但是實際使用中,Redux的表現差強人意,可以說是不好用。而同時,社區也出現了一些數據管理的方案,Mobx就是其中之一。 R...
閱讀 3329·2021-11-22 12:04
閱讀 2713·2019-08-29 13:49
閱讀 485·2019-08-26 13:45
閱讀 2246·2019-08-26 11:56
閱讀 1002·2019-08-26 11:43
閱讀 596·2019-08-26 10:45
閱讀 1271·2019-08-23 16:48
閱讀 2161·2019-08-23 16:07