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

首頁 > 語言 > JavaScript > 正文

詳解如何優雅地在React項目中使用Redux

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

前言

或許你當前的項目還沒有到應用Redux的程度,但提前了解一下也沒有壞處,本文不會安利大家使用Redux

概念

首先我們會用到哪些框架和工具呢?

React

UI框架

Redux

狀態管理工具,與React沒有任何關系,其他UI框架也可以使用Redux

react-redux

React插件,作用:方便在React項目中使用Redux

react-thunk

中間件,作用:支持異步action

目錄結構

Tips:與Redux無關的目錄已省略

|--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            
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 保定市| 香港 | 大邑县| 宝丰县| 蓬安县| 赤峰市| 永寿县| 安岳县| 吉安市| 古交市| 县级市| 和龙市| 新宁县| 顺平县| 泽州县| 潜山县| 溧水县| 北宁市| 万全县| 香河县| 桐城市| 博野县| 丹江口市| 灌云县| 星座| 鹤峰县| 长岭县| 雅江县| 沁水县| 宝山区| 新安县| 周口市| 宣汉县| 西城区| 孙吴县| 抚远县| 邹平县| 遵化市| 无为县| 西宁市| 潍坊市|