位置: 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旅游网页设计)

  • 免租期租金怎么处理
  • 资金账簿印花税减半政策
  • 软件产品即征即退条件
  • 纳税申报表申报日期
  • 代缴水电费如何做账
  • 经营租入的固定资产是资产吗
  • 预收货款存入银行分录
  • 公允价值变动是减值吗
  • 项目清算组
  • 工程暂估价超了怎么办
  • 印花税工会经费会计分录
  • 摊销房租账务处理
  • 传媒公司的成本构成有哪些
  • 收到技术服务费计入什么科目
  • 有进项没有销项可以零申报吗
  • 外出什么意思?
  • 会员的消费频次怎么计算
  • 通讯费计入什么部门
  • 审计调整分录如何处理
  • 文化建设事业费怎么计算
  • 物业管理体现在哪些地方
  • 技术合同 免税
  • 单位代缴纳职工个税如何账务处理
  • 公积金发放怎么自动转入银行卡
  • 授课培训公司免责协议
  • linux系统安装谷歌浏览器教程
  • php数据库分页是怎么实现的
  • windows11更新多大
  • neo什么意思翻译成中文
  • .msc是什么意思
  • win7系统修改
  • 小程序怎么自定义tabbar
  • 建筑行业有哪些岗位,从事的要求有哪些
  • 增值税即征即退操作流程
  • 股权转让怎么做帐务处理
  • php面向对象优点,缺点
  • php验证终端类型是什么
  • 一般纳税人筹建期不用交税吗
  • php strncmp
  • high-resolution image synthesis with latent diffusion models
  • typescript和javascript那个更高级
  • 产成品核算的内容
  • 其他综合收益转入盈余公积和未分配利润
  • 残保金缴纳需要计提吗
  • 税控盘全额抵扣发票怎么勾选
  • 国税申报成功未缴税
  • 支付的劳务费是什么意思
  • 财务制度备案信息是不是可以不填
  • 给客户买的车票怎么查询
  • 零申报一般怎么收费
  • 车辆维修费如何赔偿
  • 如何将港币兑换成人民币
  • 清算期间档案转移
  • 内部损益是什么
  • 以自营方式建造固定资产
  • 防伪标内容
  • 工程保险费包括人身保险么
  • 工程保险费属于二类费
  • 小规模现金流量表年报不填可以吗
  • 快递费可以抵扣销项吗
  • 固定资产确认条件最新
  • 公众责任险作用
  • 实用的银行转账怎么转
  • xp系统不能搜索
  • Windows Server 2016预览版10514系统镜像下载泄露
  • vim如何操作
  • root linux
  • linux文件压缩和解压缩命令
  • smsmon32.exe - smsmon32是什么进程
  • imscmig.exe
  • perl中打开文件
  • Unity符国新:3D技术将渗透到生活的各个方面
  • 分享两句话
  • 自定义dialogfragment
  • 如何用python画花瓣
  • shell脚本相互调用
  • js插件推荐
  • 北京市地方税务局2015第10号文件
  • 广告费加计扣除标准
  • 税务投诉电话12345
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设