位置: IT常识 - 正文

Redux工具包(二) - Redux Toolkit的异步操作(发送网络请求)(redux reducer使用教程)

编辑:rootadmin
Redux工具包(二) - Redux Toolkit的异步操作(发送网络请求) Redux Toolkit异步操作

推荐整理分享Redux工具包(二) - Redux Toolkit的异步操作(发送网络请求)(redux reducer使用教程),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:redux 教程,redux-toolkit,redux 教程,redux 教程,redux-tookit,redux tool,redux-toolkit,redux tool,内容如对您有帮助,希望把文章链接给更多的朋友!

在之前的开发中,我们通过redux-thunk中间件让dispatch中可以进行异步操作, 其实Redux Toolkit工具包默认已经给我们集成了Thunk相关的功能, 我们可以通过createAsyncThunk函数创建一个异步的action

createAsyncThunk函数有参数:

参数一: 传入事件类型type

参数二: 传入一个函数, 该函数可以执行异步操作, 甚至可以直接传入一个异步函数

export const fetchHomeMultidataAction = createAsyncThunk("fetch/homemultidata", async () => { const res = await axios.get("http://123.207.32.32:8000/home/multidata") const banners = res.data.data.banners.list const recommends = res.data.data.recommends.list})f

当createAsyncThunk创建出来的action被dispatch时,会存在三种状态:

pending: action被发出,但是还没有最终的结果;

fulfilled: 获取到最终的结果(有返回值的结果);

rejected: 执行过程中有错误或者抛出了异常;

Redux工具包(二) - Redux Toolkit的异步操作(发送网络请求)(redux reducer使用教程)

我们可以在createSlice的entraReducer中监听这些结果:

注意: 我们创建的一部action: fetchHomeMultidataAction返回的结果, 会被传到下面监听函数的actions参数中,

通过actions.payload获取(也可以对actions进行结构, 直接获取payload)

// extraReducers中针对异步action, 监听它的状态extraReducers: { // 处于padding状态时回调 [fetchHomeMultidataAction.pending](state, actions) { console.log("正处于pending状态") }, // 处于fulfilled状态时回调 [fetchHomeMultidataAction.fulfilled](state, actions) { console.log("正处于fulfilled状态") }, // 处于rejected状态时回调 [fetchHomeMultidataAction.rejected](state, actions) { console.log("正处于rejected状态") }}

演示网络请求的流程:

方式一:

在home.js中, 通过createAsyncThunk函数创建一个异步的action

再在extraReducers中监听这个异步的action的状态, 当他处于fulfilled状态时, 获取到网络请求的数据, 并修改原来state中的数据

import { createSlice, createAsyncThunk } from "@reduxjs/toolkit"import axios from "axios"// 创建一个异步的actionexport const fetchHomeMultidataAction = createAsyncThunk("fetch/homemultidata", async () => { const res = await axios.get("http://123.207.32.32:8000/home/multidata") // 返回结果会传递到监听函数的actions中 return res.data})const homeSlice = createSlice({ name: "home", initialState: { banners: [], recommends: [] }, // extraReducers中针对异步action, 监听它的状态 extraReducers: { [fetchHomeMultidataAction.fulfilled](state, { payload }) { // 在fulfilled状态下, 将state中的banners和recommends修改为网络请求后的数据 state.banners = payload.data.banner.list state.recommends = payload.data.recommend.list } }})export default homeSlice.reducer

方式二:

如果我们不想通过在extraReducers在监听状态, 再修改state这种方法的话, 还有另外的一种做法

我们创建的fetchHomeMultidataAction这个异步action是接受两个参数的

参数一, extraInfo: 在派发这个异步action时, 如果有传递参数, 会放在extraInfo里面参数二, store: 第二个参数将store传递过来

这样我们获取到结果后, 通过dispatch修改store中的state, 无需再监听异步action的状态

import { createSlice, createAsyncThunk } from "@reduxjs/toolkit"import axios from "axios"// 创建一个异步的actionexport const fetchHomeMultidataAction = createAsyncThunk( "fetch/homemultidata", // 有传递过来两个个参数, 从store里面解构拿到dispatch async (extraInfo, { dispatch }) => { // 1.发送网络请求获取数据 const res = await axios.get("http://123.207.32.32:8000/home/multidata") // 2.从网络请求结果中取出数据 const banners = res.data.data.banner.list const recommends = res.data.data.recommend.list// 3.执行dispatch, 派发action dispatch(changeBanners(banners)) dispatch(changeRecommends(recommends)) })const homeSlice = createSlice({ name: "home", initialState: { banners: [], recommends: [] }, reducers: { changeBanners(state, { payload }) { state.banners = payload }, changeRecommends(state, { payload }) { state.recommends = payload } }})export const { changeBanners, changeRecommends } = homeSlice.actionsexport default homeSlice.reducer

不管是哪种方式, 都需要在页面的componentDidMount生命周期中, 通过派发异步的action发送网络请求

import React, { PureComponent } from 'react'import { connect } from 'react-redux'import { fetchHomeMultidataAction } from '../store/features/home'export class About extends PureComponent { // 生命周期中, 调用映射的方法派发异步的action componentDidMount() { this.props.fetchHomeMultidata() } render() { const { banners, recommends } = this.props return ( <div> <h2>About</h2> <h2>轮播图数据</h2> <ul> { banners.map(item => { return <li key={item.acm}>{item.title}</li> }) } </ul> <h2>推荐数据</h2> <ul> { recommends.map(item => { return <li key={item.acm}>{item.title}</li> }) } </ul> </div> ) }}const mapStateToProps = (state) => ({ banners: state.home.banners, recommends: state.home.recommends})// 派发异步的actionconst mapDispatchToProps = (dispatch) => ({ fetchHomeMultidata() { dispatch(fetchHomeMultidataAction()) }})export default connect(mapStateToProps, mapDispatchToProps)(About)
本文链接地址:https://www.jiuchutong.com/zhishi/296202.html 转载请保留说明!

上一篇:【微信小程序】如何获得自己当前的定位呢?本文利用逆地址解析、uni-app带你实现(微信小程序怎么制作自己的小程序)

下一篇:html旅游网站设计与实现——绿色古典旅游景区 HTML+CSS+JavaScript(html5旅游网页设计)

  • 推广策划应注意五点(策划推广活动的思路步骤)

    推广策划应注意五点(策划推广活动的思路步骤)

  • 路由器管理ip地址怎么获取(路由器管理ip)(路由器管理ip地址)

    路由器管理ip地址怎么获取(路由器管理ip)(路由器管理ip地址)

  • 苹果手表怎么开启声音和振动(苹果手表怎么开通虚拟卡)

    苹果手表怎么开启声音和振动(苹果手表怎么开通虚拟卡)

  • 苹果手机怎么显示实时流量数据(苹果手机怎么显示sim卡联系人)

    苹果手机怎么显示实时流量数据(苹果手机怎么显示sim卡联系人)

  • 学信网密保问题顺序有要求吗(学信网密保问题设置错误是什么意思)

    学信网密保问题顺序有要求吗(学信网密保问题设置错误是什么意思)

  • 双十一退货红包还有吗(双十一退货红包还能用吗)

    双十一退货红包还有吗(双十一退货红包还能用吗)

  • 小米m1804d2se是什么型号(小米m1804d2se是什么型号多少钱)

    小米m1804d2se是什么型号(小米m1804d2se是什么型号多少钱)

  • 抖音亲密值是什么(抖音亲密值指的是)

    抖音亲密值是什么(抖音亲密值指的是)

  • 苹果手机怎么隐藏微信好友发来的信息(苹果手机怎么隐藏软件app图标)

    苹果手机怎么隐藏微信好友发来的信息(苹果手机怎么隐藏软件app图标)

  • 快手作品换风格影响热门吗(快手作品换风格后多久能恢复)

    快手作品换风格影响热门吗(快手作品换风格后多久能恢复)

  • 微信号登新手机换绑要3天吗(微信号登新手机改密码要3天一直在线吗)

    微信号登新手机换绑要3天吗(微信号登新手机改密码要3天一直在线吗)

  • 不用原装充电器的危害(不用原装充电器会充坏手机吗)

    不用原装充电器的危害(不用原装充电器会充坏手机吗)

  • 清理手机运行内存的软件(清理手机运行内存空间)

    清理手机运行内存的软件(清理手机运行内存空间)

  • 为什么笔记本电脑亮度已经最亮但还是太暗(为什么笔记本电脑找不到无线网络)

    为什么笔记本电脑亮度已经最亮但还是太暗(为什么笔记本电脑找不到无线网络)

  • b站怎么设置自动播放下一p(b站怎么设置自动回复)

    b站怎么设置自动播放下一p(b站怎么设置自动回复)

  • 电脑开机风扇声音很大(电脑开机风扇声音很大但电脑没反应)

    电脑开机风扇声音很大(电脑开机风扇声音很大但电脑没反应)

  • 快手怎么设置禁止评论(快手怎么设置禁止私聊)

    快手怎么设置禁止评论(快手怎么设置禁止私聊)

  • laas是怎样一种平台(laaspaassaas)

    laas是怎样一种平台(laaspaassaas)

  • 小米cc9pro支持无线充电吗(小米cc9pro有无线充电功能吗?)

    小米cc9pro支持无线充电吗(小米cc9pro有无线充电功能吗?)

  • 苏通卡微信充值步骤(苏通卡 微信充值)

    苏通卡微信充值步骤(苏通卡 微信充值)

  • 手机安全模式怎么解除(手机安全模式怎么调回正常模式)

    手机安全模式怎么解除(手机安全模式怎么调回正常模式)

  • 异步函数async(异步函数执行顺序)

    异步函数async(异步函数执行顺序)

  • 建筑业小规模纳税人 扣除分包款 开票
  • 代扣个税怎么做凭证
  • 增值税交多少怎么查询
  • 承兑可以要吗
  • 企业内部转账应注意什么
  • 结转完工产品生产成本会计科目
  • 自然人城建税减半征收
  • 管理会计与财务会计的联系与区别
  • 现金流管理模式
  • 发票抬头开错重开怎么处理?
  • 房地产行业增值税筹划
  • 营改增后进项税额分摊
  • 企业收入进私户怎么做账
  • 支付的水电费属于什么会计科目
  • 境外演艺经纪公司代扣代缴哪些税款?
  • 建筑业预征缴纳税款
  • 免抵退转免税账务处理
  • 高新技术企业退税比例是多少
  • 所有者权益与所有者权益合计
  • 公对公转账备注信息填错了怎么办
  • 应收账款及票据
  • 固定资产审计目标
  • 盘库存在的问题汇总
  • 财务报表包括哪三大报表?(多选)
  • 实收资本属于哪类
  • 货币资金资产处置损益表如何填
  • 苹果14出来13会下架吗
  • 少收的应收款和应付账款
  • 企业车辆按揭的利弊分析
  • 应收账款周转天数减少说明什么
  • tim模块
  • uni app怎么样
  • 企业合并分立
  • 会计凭证应该如何录入的方法
  • 印花税哪里买
  • Chrome谷歌浏览器官网
  • PHP 中TP5 Request 请求对象的实例详解
  • 未使用的土地使用权可以摊销吗
  • php运算符号
  • php面向对象的三大特征
  • 坏账准备税收调整
  • 【深度学习】模型过拟合的原因以及解决办法
  • 私人定制ai绘画下载
  • 解压包的命令
  • 开票物流辅助服务怎么搜
  • 企业所得税计提分录
  • 第四季度报表和年报对不上
  • 技术内部化
  • 税务信用级别A有什么好处
  • 发票验旧验的是哪些发票
  • sql server概述
  • 工资发放用现金
  • 企业出售自用房产开具增值税
  • 运费发票抵扣要求
  • 收款收据可以用于财务报账吗
  • 路桥费能抵扣增值税吗
  • 收到技术服务费的账务处理
  • 当月已付款, 没收到发票怎么做账
  • 资本化利息支出在报表哪里
  • 五金配件生意好做吗
  • Centos7.3下mysql5.7.18安装并修改初始密码的方法
  • windows下安装nas
  • 关闭默认共享的影响
  • linux 切文件
  • Xp系统的桌面文件在哪里
  • windows xp系
  • pe硬盘安装win7系统教程
  • win7 安装系统
  • win7的命令对话框在哪里
  • 高通ar芯片
  • 微信小程序中显示app.json在项目根目录未找到怎么回事
  • jquery源码下载
  • Node.js中的什么模块是用于处理文件和目录的
  • 深入解析抑郁症:什么是它的表现?别小看它的危害程度!
  • 使用jquery的步骤
  • activity的自定义流程
  • python中的print语句
  • 东莞网上办税服务厅
  • 2021年京东养鸡如何合作
  • 用实际行动践行中国税务精神
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设