Redux入門

概念

React作爲一個視圖層框架,天然是不適合用來管理數據的。因爲React框架中,父子組件的通信通過props(父向子傳遞),或者是回調函數(子向父傳遞)兩種方式實現。

若是隻是父子組件之間的通信,實現起來還不算太麻煩,若是跨層級的通信,則需要多個組件之間層層通信,實現起來不僅麻煩而且性能也不好。

還有我們知道React的組件是可以構建出一棵組件樹的,若是需要通信的兩個組件不在同一顆子樹內,那麼通信起來則會是一場噩夢。

於是就有了Redux,它可以幫助我們管理數據,所有的組件都通過統一的一個store讀寫數據。因此我們就可以節省大量組件間通信的操作。

工作流程

下圖是Redux的工作流程。

[外鏈圖片轉存失敗(img-YnSYW3V1-1564475300202)(https://note.youdao.com/src/WEBRESOURCEf1875a2468ce5da97db888717021f5fe)]

Action

Action是把數據從應用傳到store的有效載荷,也是store數據的唯一來源。

Action本質上就是JavaScript對象。我們約定,action內必須使用一個字符串類型的type字段來表示將要執行的動作。

const ADD_TODO_ITEM = 'add_todo_item';
const action = {
        type: ADD_TODO_ITEM
};

Action就好比是一條命令,一條讓store執行相應操作的命令。

Reducer

Action是一條命令,可是store並不能直接理解這些命令,於是就要通過Reducer來爲store“解釋”命令的含義。

Reducer指定了應用狀態的變化如何響應action併發送到store。

reducer就是一個純函數,接收舊的stateaction,返回新的state

function reducer(state, action){
    if(action.type === 'add_todo_item'){
        //Do something     
    }
}

通過爲state設置默認屬性,還可以爲store設置初始值。

const defailtState = {
    content: '',
    list: []
};

function reducer(state=defaultState, action){
    if(action.type === 'add_todo_item'){
        //Do something     
    }
    return state;
}

store

顧名思義,store就是用來保存應用數據的對象,可以想象成一個數據庫。

它有以下方法:

  • getState:用來獲取store當前的數據
  • dispatch(action):將action發送給storestore再轉發至reducer進行處理。
  • subscribe:該方法在組件中使用,作用是註冊store發生變化的監聽器。

需要的是注意,應用中只能有一個store

store的創建

import { createStore } from 'redux';
import reducer from './reducer';
const store = createStore(reducer);
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章