或許你當前的項目還沒有到應用Redux的程度,但提前了解一下也沒有壞處
首先我們會用到哪些框架和工具呢?
React
UI框架
Redux
狀態管理工具,與React沒有任何關系,其他UI框架也可以使用Redux
react-redux
React插件,作用:方便在React項目中使用Redux
react-thunk
中間件,作用:支持異步action
|--src |-- store Redux目錄 |-- actions.js |-- index.js |-- reducers.js |-- state.js |-- components 組件目錄 |-- Test.jsx |-- App.js 項目入口
準備工作
第1步:提供默認值,既然用Redux來管理數據,那么數據就一定要有默認值,所以我們將state的默認值統一放置在state.js文件:
// state.js// 聲明默認值// 這里我們列舉兩個示例// 同步數據:pageTitle// 異步數據:infoList(將來用異步接口獲取)export default { pageTitle: '首頁', infoList: []}第2步:創建reducer,它就是將來真正要用到的數據,我們將其統一放置在reducers.js文件
// reducers.js// 工具函數,用于組織多個reducer,并返回reducer集合import { combineReducers } from 'redux'// 默認值import defaultState from './state.js'// 一個reducer就是一個函數function pageTitle (state = defaultState.pageTitle, action) { // 不同的action有不同的處理邏輯 switch (action.type) { case 'SET_PAGE_TITLE': return action.data default: return state }}function infoList (state = defaultState.infoList, action) { switch (action.type) { case 'SET_INFO_LIST': return action.data default: return state }}// 導出所有reducerexport default combineReducers({ pageTitle, infoList////第3步:創建action,現在我們已經創建了reducer,但是還沒有對應的action來操作它們,所以接下來就來編寫action
// actions.js// action也是函數export function setPageTitle (data) { return (dispatch, getState) => { dispatch({ type: 'SET_PAGE_TITLE', data: data }) }}export function setInfoList (data) { return (dispatch, getState) => { // 使用fetch實現異步請求 window.fetch('/api/getInfoList', { method: 'GET', headers: { 'Content-Type': 'application/json' } }).then(res => { return res.json() }).then(data => { let { code, data } = data if (code === 0) { dispatch({ type: 'SET_INFO_LIST', data: data }) } }) }}最后一步:創建store實例
// index.js// applyMiddleware: redux通過該函數來使用中間件// createStore: 用于創建store實例import { applyMiddleware, createStore } from 'redux'// 中間件,作用:如果不使用該中間件,當我們dispatch一個action時,需要給dispatch函數傳入action對象;但如果我們使用了這個中間件,那么就可以傳入一個函數,這個函數接收兩個參數:dispatch和getState。這個dispatch可以在將來的異步請求完成后使用,對于異步action很有用import thunk from 'redux-thunk'// 引入reducerimport reducers from './reducers.js'// 創建store實例let store = createStore( reducers, applyMiddleware(thunk))export default store
新聞熱點
疑難解答
圖片精選