Redux學習筆記-基礎知識

 

Redux概述redux

是什麼:Redux是管理狀態的容器,提供可預測的狀態管理。dom

怎麼作:Redux主要是用來管理組件或者應用的狀態,本質上跟一個事件處理器差很少。經過分發action觸發reduce來處理state。 特色:函數

  1. 單一數據源。

    整個應用的state是惟一,state的更新引起應用或者組件的更新,在整個程序運行期間,state有且僅有一個。spa

  1. State只讀

    惟一改變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主要有如下職責:

  • 維持應用的 state;
  • 提供 getState() 方法獲取 state;
  • 提供 dispatch(action) 方法更新 state;
  • 經過 subscribe(listener) 註冊監聽器;
  • 經過 subscribe(listener) 返回的函數註銷監聽器。

經過createStore()方法建立store實例,該方法接受兩個參數:第一個是reducer,就是action的處理函數,第二個是可選參數,用來設置state的初始狀態。

數據流

全部Redux應用中,數據的流向是單向的,具體能夠從如下幾點來理解:

  1. 分發action
    經過調用store.dispatch(action)來分發action。咱們能夠在任何地方調用此方法來分發action。
  2. 處理action
    經過store分發的action,被建立store實例時使用的reducer處理。
  3. 合併state

多個Reducer共同處理action後,把state合併成一個新的state對象。 4. 返回新state

最終返回一個新的state對象,Redux應用可使用該state作其餘事情了。

[參考redux官方文檔](http://www.redux.org.cn/)

相關文章
相關標籤/搜索