redux
2015年創建的科技術語
Redux由Dan Abramov在2015年創建的科技術語。是受2014年Facebook的Flux架構以及函數式編程語言Elm啟發。很快,Redux因其簡單易學體積小在短時間內成為最熱門的前端架構。
JavaScript應用而言是一個可預測狀態的容器。換言之,它是一個應用數據流框架,而不是傳統的像underscore.js或者AngularJs那樣的庫或者框架。
狀態管。簡言,單獨量狀態樹()保存整狀態,改。據化,創建()。
。區改狀態,件觸化。組件訂閱件狀態步。器,傳遞據註冊調件。另擴展,混亂矛盾。
在應用中使用Redux有如下好處:
• 預測
• 始終有一個準確的數據源,就是store, 對於如何將actions以及應用的其他部分和當前的狀態同步可以做到絕不混亂。
• 維護
• 具備可預測結果的性質和嚴格的組織結構讓代碼更容易維護。
• 組織
• 對代碼應該如何組織更加嚴苛,這使代碼更加一致,對團隊協作更加容易。
• 測試
• 編寫可測試代碼的首要準則就是編寫可以僅做一件事並且獨立的小函數。Redux的代碼幾乎全部都是這樣的函數:短小、純粹、分離。
• 服務端渲染
• 可以帶來更好的用戶體驗並且有助於搜索引擎優化,尤其是對於首次渲染。僅僅是把服務端創建的store傳遞給客戶端就可以。
• 開發者工具
• 開發者可以實時跟蹤在應用中正在發生的一切,從actions到狀態的改變。
• 社區與生態圈
• 存在很多支持Redux的社區,使它能夠吸引更多的人來使用。
Redux核心概念有三個:
• actions
• store
• reducers
![redux](https://i1.twwiki.net/cover/w200/m0/7/m07a6af025936cf0897d4f60a87b54101.jpg)
redux
簡單地,Actions就是事件。Actions傳遞來自這個應用(用戶介面,內部事件比如API調用和表單提交)的數據給store。store只獲取來自Actions的信息。內部Actions就是簡單的具有一個type屬性(通常是常量)的JavaScript對象,這個對象描述了action的類型以及傳遞給store的負載信息。
Actions通過action生成器創建,它們僅僅是是返回action的函數。
要在應用中的任何地方調用actions很容易,使用dispatch方法。
在函數式JavaScript中reducer基於數組reduce方法,接收一個回調(reducer)讓你從多個值中獲得單個值,整數和,或者一個一系列值的累積。在Redux中,reducer就是獲得這個應用的當前狀態和事件然後返回一個新狀態的函數。理解reducer是怎樣工作的至關重要,因為它們完成大部分工作。這是一個非常簡單的reducer,通過獲取當前state和一個action作為參數,再返回下一個state:
對於更多複雜的項目,使用Redux提供的combineReducers()實例是必要的(推薦)。它把在這個應用中所有的reducer結合在一起成為單個索引reducer。每一個reducer負責它自己那部分應用的狀態,這個狀態參數和其他reducer的不一樣。combineReducers()實例使文件結構更容易維護。
如果一個對象(state)只改變一些值,Redux就創建一個新的對象,那些沒有改變的值將會指向舊的對象而且新的值將會被創建。這對性能是極好的。為了讓它更有效率你可以添加 Immutable.js
Store對象保存應用的狀態並提供一些幫助方法來存取狀態,分髮狀態以及註冊監聽。全部state由一個store來表示。任何action通過reducer返回一個新的狀態對象。這就使得Redux非常簡單以及可預測。