Redux由Dan Abramov在2015年創建的科技術語。是受2014年Facebook的Flux架構以及函數式編程語言Elm啟發。很快,Redux因其簡單易學體積小在短時間內成為最熱門的前端架構。
Redux對于JavaScript應用而言是一個可預測狀態的容器。換言之,它是一個應用數據流框架,而不是傳統的像underscore.js或者AngularJs那樣的庫或者框架。
Redux最主要是用作應用狀態的管理。簡言之,Redux用一個單獨的常量狀態樹(對象)保存這一整個應用的狀態,這個對象不能直接被改變。當一些數據變化了,一個新的對象就會被創建(使用actions和reducers)。
Redux 優點
在應用中使用Redux有如下好處:
-
預測
始終有一個準確的數據源,就是store, 對于如何將actions以及應用的其他部分和當前的狀態同步可以做到絕不混亂。
-
維護
具備可預測結果的性質和嚴格的組織結構讓代碼更容易維護。
-
組織
對代碼應該如何組織更加嚴苛,這使代碼更加一致,對團隊協作更加容易。
-
測試
編寫可測試代碼的首要準則就是編寫可以僅做一件事并且獨立的小函數。Redux的代碼幾乎全部都是這樣的函數:短小、純粹、分離。
-
服務端渲染
可以帶來更好的用戶體驗并且有助于搜索引擎優化,尤其是對于首次渲染。僅僅是把服務端創建的store傳遞給客戶端就可以。
-
開發者工具
開發者可以實時跟蹤在應用中正在發生的一切,從actions到狀態的改變。
-
社區與生態圈
存在很多支持Redux的社區,使它能夠吸引更多的人來使用。
Redux 差異
Redux和Flux很像。主要區別在于Flux有多個可以改變應用狀態的store,它通過事件來觸發這些變化。組件可以訂閱這些事件來和當前狀態同步。Redux沒有分發器dispatcher,但在Flux中dispatcher被用來傳遞數據到注冊的回調事件。另一個不同是Flux中有很多擴展是可用的,這也帶來了一些混亂與矛盾。