redux簡單的使用過程及流程
二.redux的使用
1. redux使用過程
安裝redux:
npm install redux --save
或
yarn add redux
通過建立一個簡單的js檔案,先來簡單學習一下redux:
1.2.搭建專案結構
1.2.1 建立一個新的專案資料夾:learn-redux
執行初始化操作
yarn init
安裝redux
yarn add redux
1.2.2 建立src目錄,並且建立index.js檔案
1.2.3 修改package.json可以執行index.js
"scripts": {
"start": "node src/index.js"
}
通過修改之後就不用使用node index.js執行,只需要yarn start
修改packages.json
1.3.開始在index.js中編寫程式碼
1.3.1.建立一個物件,作為我們要儲存的狀態:
const redux = require('redux');
const initialState = {
counter: 0
}
1.3.2.建立Store來儲存這個state
- 建立store時必須建立reducer;
- 我們可以通過 store.getState 來獲取當前的state
// 建立reducer
const reducer = (state = initialState, action) => {
return state;
}
// 根據reducer建立store
const store = redux.createStore(reducer);
console.log(store.getState());
1.3.3.通過action來修改state
- 通過dispatch來派發action;
- 通常action中都會有type屬性,也可以攜帶其他的資料;
store.dispatch({
type: "INCREMENT"
})
store.dispath({
type: "DECREMENT"
})
store.dispatch({
type: "ADD_NUMBER",
number: 5
})
1.3.4.修改reducer中的處理程式碼
- 這裡一定要記住,reducer是一個純函式,不需要直接修改state;
const reducer = (state = initialState, action) => {
switch (action.type) {
case "INCREMENT":
return {...state, counter: state.counter + 1};
case "DECREMENT":
return {...state, counter: state.counter - 1};
case "ADD_NUMBER":
return {...state, counter: state.counter + action.number}
default:
return state;
}
}
1.3.5 可以在派發action之前,監聽store的變化:
store.subscribe(() => {
console.log(store.getState());
})
完成的案例程式碼如下:
const redux = require('redux');
const initialState = {
counter: 0
}
// 建立reducer
const reducer = (state = initialState, action) => {
switch (action.type) {
case "INCREMENT":
return {...state, counter: state.counter + 1};
case "DECREMENT":
return {...state, counter: state.counter - 1};
case "ADD_NUMBER":
return {...state, counter: state.counter + action.number}
default:
return state;
}
}
// 根據reducer建立store
const store = redux.createStore(reducer);
store.subscribe(() => {
console.log(store.getState());
})
// 修改store中的state
store.dispatch({
type: "INCREMENT"
})
// console.log(store.getState());
store.dispatch({
type: "DECREMENT"
})
// console.log(store.getState());
store.dispatch({
type: "ADD_NUMBER",
number: 5
})
// console.log(store.getState());
2. redux結構劃分
如果我們將所有的邏輯程式碼寫到一起,那麼當redux變得複雜時程式碼就難以維護。
接下來,將會對程式碼進行拆分,將store、reducer、action、constants拆分成一個個檔案。
2.1注意:node中對ES6模組化的支援
從node v13.2.0開始,node才對ES6模組化提供了支援:
- node v13.2.0之前,需要進行如下操作:
- 在package.json中新增屬性:“type”: “module”;
- 在執行命令中新增如下選項:node --experimental-modules src/index.js;
node v13.2.0之後,只需要進行如下操作:
- 在package.json中新增屬性:“type”: “module”;
注意:匯入檔案時,需要跟上.js字尾名;
2.2對redux結構進行劃分
建立store/index.js檔案:
import redux from 'redux';
import reducer from './reducer.js';
const store = redux.createStore(reducer);
export default store;
建立store/reducer.js檔案:
import {
ADD_NUMBER,
SUB_NUMBER
} from './constants.js';
const initialState = {
counter: 0
}
function reducer(state = initialState, action) {
switch(action.type) {
case ADD_NUMBER:
return {...state, counter: state.counter + action.num};
case SUB_NUMBER:
return {...state, counter: state.counter - action.num};
default:
return state;
}
}
export default reducer;
建立store/actionCreators.js檔案:
import {
ADD_NUMBER,
SUB_NUMBER
} from './constants.js'
export const addAction = (num) => {
return {
type: "ADD_NUMBER",
num
}
}
const subAction = (count) => ({
type: SUB_NUMBER,
num: count
})
export {
subAction
}
建立store/constants.js檔案:
export const ADD_NUMBER = "ADD_NUMBER";
const SUB_NUMBER = "SUB_NUMER";
export {
SUB_NUMBER
}
3. Redux流程圖
我們已經知道了redux的基本使用過程,那麼我們就更加清晰來認識一下redux在實際開發中的流程:
- 全域性通常只有一個Store,儲存我們的State;
- Component中在某些情況會派發Action(這些Action是我們提前定義好的);
- Reducer會接收到這些Action,並且在Reducer中會返回一個新的State,作為Store的State;
- State發生更新之後會觸發通知,告知訂閱者資料發生了改變;
- 訂閱者拿到最新的資料(在props中),更新到jsx中,介面發生改變;
之後會講解有關redux在react中的使用
相關文章
- redux簡單使用Redux
- React-Redux簡單使用ReactRedux
- React-redux的原理以及簡單使用ReactRedux
- [譯] Redux 的工作過程Redux
- 通過了解 Redux 簡單原始碼,掌握 Redux 資料流原理Redux原始碼
- iOS MQTT 簡單使用流程iOSMQQT
- UDEV簡介及配置過程dev
- 過等保流程簡單說明
- 簡單的造數儲存過程儲存過程
- 簡單的儲存過程分頁儲存過程
- 簡單的分頁儲存過程儲存過程
- Redux的簡單概念介紹Redux
- 把redux封裝起來,更加簡單方便的使用Redux封裝
- 基於Netty的簡單IM(流程圖詳解互動過程、使用到的Handler以及心跳機制)Netty流程圖
- mySQL語法中的儲存過程及if語句的使用簡例MySql儲存過程
- 使用Pandas進行資料清理過程的簡單步驟 - sahilfruitwalaUI
- 簡單的Git流程Git
- Promise的使用及簡單實現Promise
- webeasymail的簡單破解過程 (2千字)WebAI
- 學習一個簡單的儲存過程儲存過程
- PetaPoco在.net專案中的簡單使用(儲存過程篇)儲存過程
- mysql 儲存過程簡單例項MySql儲存過程單例
- mysql儲存過程簡單例項MySql儲存過程單例
- Standby資料庫簡單建立過程資料庫
- nginx+php+mysql+wordpress搭建簡單站點 安裝及配置過程NginxPHPMySql
- 簡單介紹redux的中介軟體Redux
- Redux 原理和簡單實現Redux
- redux簡單實現與分析Redux
- Retalk,Redux 從未如此簡單Redux
- Git:使用 GitHub 託管程式碼的簡單流程Github
- prometheus 簡單使用及簡單 middleware 開發Prometheus
- 一個簡單java程式的執行全過程Java
- 增加複合索引優化SQL的簡單過程索引優化SQL
- 簡單易懂的 webpack 打包後 JS 的執行過程WebJS
- 流程圖繪製的操作過程流程圖
- sysbench安裝及簡單使用
- 使用TensorFlow 來實現一個簡單的驗證碼識別過程
- 簡單的mysql儲存過程,輸出結果集MySql儲存過程