国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 語言 > JavaScript > 正文

優雅的在React項目中使用Redux的方法

2024-05-06 15:28:06
字體:
來源:轉載
供稿:網友

或許你當前的項目還沒有到應用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            
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 砚山县| 滕州市| 博野县| 炎陵县| 布尔津县| 柯坪县| 剑河县| 华阴市| 南安市| 屏东县| 沈阳市| 沙坪坝区| 满洲里市| 溆浦县| 晋宁县| 石林| 玉屏| 香港| 额尔古纳市| 罗平县| 芜湖市| 荣成市| 石家庄市| 吐鲁番市| 雅江县| 将乐县| 陇川县| 余姚市| 高唐县| 三台县| 云林县| 隆尧县| 农安县| 延吉市| 万源市| 阿拉善盟| 蓝山县| 桃园县| 高邮市| 蕉岭县| 黄骅市|