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