当前位置: 首页 > news >正文

【前端知识】React 基础巩固(三十六)——RTK中的异步操作

React 基础巩固(三十六)——RTK中的异步操作

一、RTK中使用异步操作

  1. 引入RTK中的createAsyncThunk,在extraReducers中监听执行状态

    import { createSlice, createAsyncThunk } from "@reduxjs/toolkit";
    import axios from "axios";export const fetchHomeMultidataAction = createAsyncThunk("fetch/homemultidata",async () => {const res = await axios.get("http://123.207.32.32:8000/home/multidata");return res.data;}
    );const homeSlice = createSlice({name: "home",initialState: {banners: [],recommends: [],},reducers: {changeBanners(state, { payload }) {state.banners = payload;},changeRecommends(state, { payload }) {state.recommends = payload;},},extraReducers: {[fetchHomeMultidataAction.pending](state, action) {console.log("fetchHomeMultidataAction pending");},[fetchHomeMultidataAction.fulfilled](state, { payload }) {console.log("fetchHomeMultidataAction fulfilled");state.banners = payload.data.banner.list;state.recommends = payload.data.recommend.list;},[fetchHomeMultidataAction.rejected](state, action) {console.log("fetchHomeMultidataAction rejected");},},
    });export const { changeBanners, changeRecommends } = homeSlice.actions;
    export default homeSlice.reducer;
  2. 在界面中引入所需的异步操作Action

    import React, { PureComponent } from "react";
    import { connect } from "react-redux";
    import { addNumber } from "../store/features/counter";
    import { fetchHomeMultidataAction } from "../store/features/home";export class Home extends PureComponent {componentDidMount() {this.props.fetchHomeMultidata()}addNumber(num) {this.props.addNumber(num);}render() {const { counter } = this.props;return (<div>home:{counter}<button onClick={(e) => this.addNumber(5)}>+5</button>
    <button onClick={(e) => this.addNumber(8)}>+8</button>
    <button onClick={(e) => this.addNumber(18)}>+18</button>
    </div>
    );
    }
    }const mapStateToProps = (state) => ({counter: state.counter.counter,
    });const mapDispatchToProps = (dispatch) => ({addNumber(num) {dispatch(addNumber(num));},fetchHomeMultidata(){dispatch(fetchHomeMultidataAction())}
    });export default connect(mapStateToProps, mapDispatchToProps)(Home);
  3. 查看运行结果
    在这里插入图片描述

二、extraReducer的另外一种写法(链式调用)

  1. extraReducer还可以传入一个函数,函数接受一个builder参数:
extraReducers: (builder) => {builder.addCase(fetchHomeMultidataAction.pending, (state, action) => {console.log("fetchHomeMultidataAction pending");}).addCase(fetchHomeMultidataAction.fulfilled, (state, { payload }) => {console.log("fetchHomeMultidataAction fulfilled");state.banners = payload.data.banner.list;state.recommends = payload.data.recommend.list;}).addCase(fetchHomeMultidataAction.rejected, (state, action) => {console.log("fetchHomeMultidataAction rejected");});
},
  1. 查看运行结果,与之前的写法结果一致
    在这里插入图片描述
http://www.lryc.cn/news/101539.html

相关文章:

  • 33. 本地记事本
  • Android Glide预处理preload原始图片到成品resource 预加载RecyclerViewPreloader,Kotlin
  • 亚马逊云科技全新Amazon Bedrock,助力客户构建生成式AI应用
  • 题解:ABC275 C-Counting Squares
  • 加载已训练好的目标检测YOLOv8,v5,v3,v6模型,对数据集中某张图片中的object打上方框、标出类别,并将图片保存到本地
  • 《零基础入门学习Python》第073讲:GUI的终极选择:Tkinter10
  • Shell脚本实现分库分表操作
  • 区块链实验室(12) - 网络拓扑对PBFT共识流量的影响
  • 聊聊这几年的科技风口
  • 【力扣每日一题】2023.7.30 环形链表2
  • Flink状态的理解
  • 6.3.tensorRT高级(1)-yolov5模型导出、编译到推理(无封装)
  • 如何利用设备数字化平台推动精益制造?
  • 使用Wps减小PDF文件的大小
  • 【深度学习】GPT-3
  • 在登录界面中设置登录框、多选项和按钮(HTML和CSS)
  • 【语音识别】- 声学,词汇和语言模型
  • 【考研英语语法及长难句】小结
  • C# 反射
  • Pytorch(二)
  • Python 使用http时间同步设置系统时间源码
  • golang sync.singleflight 解决热点缓存穿透问题
  • 4、Linux驱动开发:设备-设备号设备号注册
  • C++(MFC)调用Python
  • 深度学习实践——循环神经网络实践
  • docker简单web管理docker.io/uifd/ui-for-docker
  • SpringBoot内嵌的Tomcat:
  • 企业级docker应用注意事项
  • 腾讯云高性能计算集群CPU服务器处理器说明
  • tinkerCAD案例:23.Tinkercad 中的自定义字体