Redux概述redux
是什麼:Redux是管理狀態的容器,提供可預測的狀態管理。dom
怎麼作:Redux主要是用來管理組件或者應用的狀態,本質上跟一個事件處理器差很少。經過分發action觸發reduce來處理state。 特色:函數
整個應用的state是惟一,state的更新引起應用或者組件的更新,在整個程序運行期間,state有且僅有一個。spa
惟一改變state的方法是觸發action,在reduce中 重置 state的屬性, 3. 純函數執行修改對象
相同的輸入對應相同的輸出事件
基礎信息路由
action文檔
action是把數據從應用傳到store的有限載荷。其本質上的一個js對象。按照約定,action對象中應該有一個type 字段來表示將要執行的動做,其餘屬性能夠自由定義。 在整個數據流中,action扮演的是一個消息通知者的角色,簡單的說就是告知store哪些‘事件’被觸發了。redux能夠經過reduce根據不一樣的action來對state作不一樣的操做。get
Reducerio
若是說action是‘事件’的話,那麼reducer就是‘事件處理器’。 在Redux應用中,全部的state都保存在惟一的對象中。
reducer 就是一個純函數,接收舊的 state 和 action,返回新的 state。如今只須要謹記 reducer 必定要保持純淨。只要傳入參數相同,返回計算獲得的下一個 state 就必定相同。沒有特殊狀況、沒有反作用,沒有 API 請求、沒有變量修改,單純執行計算。
永遠不要在 reducer 裏作這些操做:
修改傳入參數;
執行有反作用的操做,如 API 請求和路由跳轉;
調用非純函數,如 Date.now() 或 Math.random()。
注意 :
1.不要修改state。使用新的對象,而後將原有state值拷貝到新對象而不是直接在老對象上更新屬性,js對象都是引用,若是在原有state上更新,可能會致使Redux沒法正確完成state的diff比較。
2. 默認狀況下返回原有state
其餘:
使用combineReducers() 來組合reducer。
store
若是說action是‘事件’,reducer是‘事件處理器’,那麼store就是全局的事件管理對象。 每一個Redux應用都應該只有 一個單一的store。但須要拆分數據處理邏輯時,應該使用Reducer組合而不是建立多個store。
Store主要有如下職責:
經過createStore()方法建立store實例,該方法接受兩個參數:第一個是reducer,就是action的處理函數,第二個是可選參數,用來設置state的初始狀態。
數據流
全部Redux應用中,數據的流向是單向的,具體能夠從如下幾點來理解:
多個Reducer共同處理action後,把state合併成一個新的state對象。 4. 返回新state
最終返回一個新的state對象,Redux應用可使用該state作其餘事情了。
[參考redux官方文檔](http://www.redux.org.cn/)