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

createAsyncThunk完整用法介绍

createAsyncThunk 是 Redux Toolkit 库中的一个功能,它用于创建处理异步逻辑的 thunk action creator。Redux Toolkit 是一个官方推荐的库,用于简化 Redux 开发过程,特别是处理常见的 Redux 模式,如异步数据流。createAsyncThunk 自动处理了诸如派发不同阶段的 action(如 pending、fulfilled、rejected)、取消正在运行的异步操作等功能,使得编写异步 Redux 逻辑变得更加简洁和高效。

基本用法

首先,确保你已经安装了 @reduxjs/toolkit

npm install @reduxjs/toolkit

然后,你可以这样使用 createAsyncThunk

import { createAsyncThunk, createSlice } from '@reduxjs/toolkit';
import axios from 'axios';// 定义异步操作
const fetchUserById = createAsyncThunk('users/fetchById', // 第一个参数是 action type 的基础名称,Redux Toolkit 会自动为pending、fulfilled、rejected添加后缀async (userId, thunkAPI) => {try {const response = await axios.get(`/api/users/${userId}`);return response.data;} catch (error) {return thunkAPI.rejectWithValue(error.message); // 错误处理,将错误信息传递给 payload}}
);// 创建 Slice
const userSlice = createSlice({name: 'user',initialState: {data: null,status: 'idle', // 或 'loading', 'succeeded', 'failed'error: null,},extraReducers: (builder) => {builder.addCase(fetchUserById.pending, (state) => {state.status = 'loading';}).addCase(fetchUserById.fulfilled, (state, action) => {state.status = 'succeeded';state.data = action.payload;}).addCase(fetchUserById.rejected, (state, action) => {state.status = 'failed';state.error = action.error.message;});},
});export default userSlice.reducer;// 在组件中 dispatch 异步 action
import { useDispatch } from 'react-redux';
import { useSelector } from 'react-redux';
import { fetchUserById } from './userSlice';function UserDetail({ userId }) {const dispatch = useDispatch();const user = useSelector((state) => state.user.data);const status = useSelector((state) => state.user.status);useEffect(() => {if (status === 'idle') {dispatch(fetchUserById(userId));}}, [status, dispatch, userId]);// ...
}

解释

  • createAsyncThunk: 接收两个参数,第一个是action的类型前缀,第二个是一个异步函数,该函数可以访问到 thunkAPI 对象,它提供了 dispatchgetState 和其他有用的方法。
  • extraReducers: 在创建的 slice 中,使用 extraReducers 来处理由 createAsyncThunk 自动生成的不同状态的 action。
  • 状态管理: 异步操作的状态(如 loading、success、failure)通常会反映在 Redux 状态中,以便 UI 能够根据状态展示不同的内容或加载指示器。
  • 组件中使用: 在需要的地方使用 useDispatchuseSelector 来 dispatch 异步 action 并获取状态。

createAsyncThunk 提供了一种清晰、统一的方式来管理 Redux 中的异步逻辑,减少了样板代码,并提高了代码的可读性和可维护性。

http://www.lryc.cn/news/362805.html

相关文章:

  • [书生·浦语大模型实战营]——第六节 Lagent AgentLego 智能体应用搭建
  • Word文档如何设置限制编辑和解除限制编辑操作
  • IO进程线程(六)进程
  • 机器视觉——找到物块中心点
  • 重磅消息! Stable Diffusion 3将于6月12日开源 2B 版本的模型,文中附候补注册链接。
  • Python报错:AttributeError: <unknown>.DeliveryStore 获取Outlook邮箱时报错
  • 如何 Logrus IT 的质量评估门户帮助提升在线商店前端(案例研究)
  • 程序调试
  • 深度学习-07-反向传播的自动化
  • 四川景源畅信:抖音做直播有哪些人气品类?
  • 闲鱼无货源-高级班,最全·最新·最干,紧贴热点 深度学习(17节课)
  • 力扣 739. 每日温度
  • 工业网关有效解决企业在数据采集、传输和整合方面的痛点问题-天拓四方
  • 金融壹账通的“新机遇” 用科技赋能助力金融机构做大做强“五篇大文章
  • Day 42 LVS四层负载均衡
  • 【源码】源码物品销售系统多种支付接口出售源码轻松赚钱
  • 图像操作的基石Numpy
  • 如何利用exceljs将data数据导出表格实现日期去重,同时保留对应日期的每一列数据
  • [C#]使用C#部署yolov8-seg的实例分割的tensorrt模型
  • 写个删除obj文件夹、bin文件夹的小工具
  • 【多目标跟踪】《FlowMOT: 3D Multi-Object Tracking by Scene Flow Association》论文阅读笔记
  • python长方形周长面积 2024年3月青少年编程电子学会python编程等级考试二级真题解析
  • C#WPF数字大屏项目实战02--主窗体布局
  • 【STM32】STM32F103C6T6标准外设库
  • 【学习笔记】Windows GDI绘图(十一)Graphics详解(下)
  • win10环境下nodejs安装过程
  • 亚信安慧AntDB:卓越的拓展性和灵活性
  • 【计算机毕设】基于SpringBoot的中小企业设备管理系统设计与实现 - 源码免费(私信领取)
  • 每日一练 - BGP配置中的认证方法
  • 人机交互中的阴差阳错