当前位置: 首页 > 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 中的异步逻辑,减少了样板代码,并提高了代码的可读性和可维护性。

相关文章:

createAsyncThunk完整用法介绍

createAsyncThunk 是 Redux Toolkit 库中的一个功能,它用于创建处理异步逻辑的 thunk action creator。Redux Toolkit 是一个官方推荐的库,用于简化 Redux 开发过程,特别是处理常见的 Redux 模式,如异步数据流。createAsyncThunk …...

[书生·浦语大模型实战营]——第六节 Lagent AgentLego 智能体应用搭建

1. 概述和前期准备 1.1 Lagent是什么 Lagent 是一个轻量级开源智能体框架,旨在让用户可以高效地构建基于大语言模型的智能体。同时它也提供了一些典型工具以增强大语言模型的能力。 Lagent 目前已经支持了包括 AutoGPT、ReAct 等在内的多个经典智能体范式&#x…...

Word文档如何设置限制编辑和解除限制编辑操作

Word文档是大家经常使用的一款办公软件,但是有些文件内容可能需要进行加密保护,不过大家可能也不需要对word文件设置打开密码。只是需要限制一下编辑操作就可以了。今天和大家分享,如何对word文件设置编辑限制、以及如何取消word文档的编辑限…...

IO进程线程(六)进程

文章目录 一、进程状态(二)进程状态切换实例1. 实例1 二、进程的创建(一)原理(二)fork函数--创建进程1. 定义2. 不关注返回值3. 关注返回值 (三) 父子进程的执行顺序(四&…...

机器视觉——找到物块中心点

首先先介绍一下我用的是HALCON中的HDevelop软件。 大家下载好软件后可以测试一下: 在程序编辑器窗口中输入下面指令: read_image(Image,monkey) 那么如果出现这样的图片,说明是没有问题的 那么本次编程采用的是下面这张图片 我们要达到的…...

重磅消息! Stable Diffusion 3将于6月12日开源 2B 版本的模型,文中附候补注册链接。

在OpenAI发布Sora后,Stability AI也发布了其最新的模型Stabled Diffusion3, 之前的文章中已经和大家介绍过,感兴趣的小伙伴可以点击以下链接阅读。Sora是音视频方向,Stabled Diffusion3是图像生成方向,那么两者没有必然的联系&…...

Python报错:AttributeError: <unknown>.DeliveryStore 获取Outlook邮箱时报错

目录 报错提示&#xff1a; 现象描述 代码解释&#xff1a; 原因分析&#xff1a; 报错提示&#xff1a; in get_outlook_email return account.DeliveryStore.DisplayName line 106, in <module> email_address get_outlook_email() 现象描述 获取outlook本地邮箱…...

如何 Logrus IT 的质量评估门户帮助提升在线商店前端(案例研究)

在当今竞争激烈的电子商务环境中&#xff0c;一个运作良好的在线店面对商业成功至关重要。然而&#xff0c;确保目标受众获得积极的用户体验可能是一项挑战&#xff0c;尤其是在使用多种语言和平台时。Logrus IT的质量评估门户是一个强大的工具&#xff0c;可帮助企业简化内容和…...

程序调试

自学python如何成为大佬(目录):https://blog.csdn.net/weixin_67859959/article/details/139049996?spm1001.2014.3001.5501 在程序开发过程中&#xff0c;免不了会出现一些错误&#xff0c;有语法方面的&#xff0c;也有逻辑方面的。对于语法方面的比较好检测&#xff0c;因…...

深度学习-07-反向传播的自动化

深度学习-07-反向传播的自动化 本文是《深度学习入门2-自製框架》 的学习笔记&#xff0c;记录自己学习心得&#xff0c;以及对重点知识的理解。如果内容对你有帮助&#xff0c;请支持正版&#xff0c;去购买正版书籍&#xff0c;支持正版书籍不仅是尊重作者的辛勤劳动&#xf…...

四川景源畅信:抖音做直播有哪些人气品类?

随着互联网科技的飞速发展&#xff0c;抖音作为新兴的社交媒体平台&#xff0c;已经成为了人们日常生活中不可或缺的一部分。而在抖音平台上&#xff0c;直播功能更是吸引了大量的用户和观众。那么&#xff0c;在抖音上做直播有哪些人气品类呢?接下来&#xff0c;就让我们一起…...

闲鱼无货源-高级班,最全·最新·最干,紧贴热点 深度学习(17节课)

课程目录 1-1&#xff1a;闲鱼潜规则_1.mp4 2-2&#xff1a;闲鱼的基础操作-养号篇_1.mp4 3-3&#xff1a;闲鱼实战运营-选品篇&#xff08;一&#xff09;_1.mp4 4-4&#xff1a;闲鱼实战运营-选图视频篇_1.mp4 5-5&#xff1a;闲鱼实战运营-标题筒_1.mp4 6-6&#xff1…...

力扣 739. 每日温度

题目来源&#xff1a;https://leetcode.cn/problems/daily-temperatures/description/ C题解&#xff1a;使用单调栈。栈里存放元素的索引&#xff0c;只要拿到索引就可以找到元素。 class Solution { public:vector<int> dailyTemperatures(vector<int>& tem…...

工业网关有效解决企业在数据采集、传输和整合方面的痛点问题-天拓四方

一、企业背景概述 随着信息技术的飞速发展&#xff0c;工业互联网已成为推动制造业转型升级的关键力量。在众多工业企业中&#xff0c;某公司凭借其深厚的技术积淀和广阔的市场布局&#xff0c;成为行业内的佼佼者。然而&#xff0c;在数字化转型的道路上&#xff0c;该公司也…...

金融壹账通的“新机遇” 用科技赋能助力金融机构做大做强“五篇大文章

金融强国、做好金融“五篇大文章”、发展新质生产力&#xff0c;正成为引导国内金融行业高质量发展的重要方向。 今年以来&#xff0c;越来越多银行保险机构为了做好金融“五篇大文章”&#xff0c;一面通过自主研发新科技&#xff0c;满足业务数字化需求&#xff0c;一面则积…...

Day 42 LVS四层负载均衡

一&#xff1a;负载均衡简介 1.集群是什么 ​ 集群&#xff08;cluster&#xff09;技术是一种较新的技术&#xff0c;通过集群技术&#xff0c;可以在付出较低成本的情况下获得在性能、可靠性、灵活性方面的相对较高的收益&#xff0c;其任务调度则是集群系统中的核心技术 …...

【源码】源码物品销售系统多种支付接口出售源码轻松赚钱

源码物品销售系统&#xff0c;多种支付接口&#xff0c;出售源码轻松赚钱。一款基于phpmysql开发的内容付费管理系统。系统支持多种收费方式&#xff0c;免签收款&#xff0c;三级分销&#xff0c;实名认证&#xff0c; 用户投稿/奖励&#xff0c;自动升级&#xff0c;佣金提现…...

图像操作的基石Numpy

OpenCV中用到的矩阵都要转换成Numpy数组 Numpy是一个经高度优化的Python数值库 创建矩阵 检索与赋值[y,x] 获取子数组[:,:] 一 创建数组array() anp.array([2,3,4]) cnp.array([1.0,2.0],[3.0,4.0]]) import numpy as npanp.array([1,2,3])bnp.array([[1,2,3],[4,5,6]])pr…...

如何利用exceljs将data数据导出表格实现日期去重,同时保留对应日期的每一列数据

const data [{ deviceId: 1, name: "B相电压", signalTypeId: 1, ts: "2024-05-13 12:10:06", unit: "kV", 1: 39.37936, value:39.37936, },{ deviceId: 1, name: "A相电压", signalTypeId: 2, ts: "2024-05-13 12:11:06"…...

[C#]使用C#部署yolov8-seg的实例分割的tensorrt模型

【测试通过环境】 win10 x64 vs2019 cuda11.7cudnn8.8.0 TensorRT-8.6.1.6 opencvsharp4.9.0 .NET Framework4.7.2 NVIDIA GeForce RTX 2070 Super 版本和上述环境版本不一样的需要重新编译TensorRtExtern.dll&#xff0c;TensorRtExtern源码地址&#xff1a;TensorRT-CShar…...

SpringBoot-17-MyBatis动态SQL标签之常用标签

文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…...

docker详细操作--未完待续

docker介绍 docker官网: Docker&#xff1a;加速容器应用程序开发 harbor官网&#xff1a;Harbor - Harbor 中文 使用docker加速器: Docker镜像极速下载服务 - 毫秒镜像 是什么 Docker 是一种开源的容器化平台&#xff0c;用于将应用程序及其依赖项&#xff08;如库、运行时环…...

Spring Boot 实现流式响应(兼容 2.7.x)

在实际开发中&#xff0c;我们可能会遇到一些流式数据处理的场景&#xff0c;比如接收来自上游接口的 Server-Sent Events&#xff08;SSE&#xff09; 或 流式 JSON 内容&#xff0c;并将其原样中转给前端页面或客户端。这种情况下&#xff0c;传统的 RestTemplate 缓存机制会…...

python/java环境配置

环境变量放一起 python&#xff1a; 1.首先下载Python Python下载地址&#xff1a;Download Python | Python.org downloads ---windows -- 64 2.安装Python 下面两个&#xff0c;然后自定义&#xff0c;全选 可以把前4个选上 3.环境配置 1&#xff09;搜高级系统设置 2…...

Golang dig框架与GraphQL的完美结合

将 Go 的 Dig 依赖注入框架与 GraphQL 结合使用&#xff0c;可以显著提升应用程序的可维护性、可测试性以及灵活性。 Dig 是一个强大的依赖注入容器&#xff0c;能够帮助开发者更好地管理复杂的依赖关系&#xff0c;而 GraphQL 则是一种用于 API 的查询语言&#xff0c;能够提…...

STM32标准库-DMA直接存储器存取

文章目录 一、DMA1.1简介1.2存储器映像1.3DMA框图1.4DMA基本结构1.5DMA请求1.6数据宽度与对齐1.7数据转运DMA1.8ADC扫描模式DMA 二、数据转运DMA2.1接线图2.2代码2.3相关API 一、DMA 1.1简介 DMA&#xff08;Direct Memory Access&#xff09;直接存储器存取 DMA可以提供外设…...

vue3 字体颜色设置的多种方式

在Vue 3中设置字体颜色可以通过多种方式实现&#xff0c;这取决于你是想在组件内部直接设置&#xff0c;还是在CSS/SCSS/LESS等样式文件中定义。以下是几种常见的方法&#xff1a; 1. 内联样式 你可以直接在模板中使用style绑定来设置字体颜色。 <template><div :s…...

linux 错误码总结

1,错误码的概念与作用 在Linux系统中,错误码是系统调用或库函数在执行失败时返回的特定数值,用于指示具体的错误类型。这些错误码通过全局变量errno来存储和传递,errno由操作系统维护,保存最近一次发生的错误信息。值得注意的是,errno的值在每次系统调用或函数调用失败时…...

第25节 Node.js 断言测试

Node.js的assert模块主要用于编写程序的单元测试时使用&#xff0c;通过断言可以提早发现和排查出错误。 稳定性: 5 - 锁定 这个模块可用于应用的单元测试&#xff0c;通过 require(assert) 可以使用这个模块。 assert.fail(actual, expected, message, operator) 使用参数…...

现代密码学 | 椭圆曲线密码学—附py代码

Elliptic Curve Cryptography 椭圆曲线密码学&#xff08;ECC&#xff09;是一种基于有限域上椭圆曲线数学特性的公钥加密技术。其核心原理涉及椭圆曲线的代数性质、离散对数问题以及有限域上的运算。 椭圆曲线密码学是多种数字签名算法的基础&#xff0c;例如椭圆曲线数字签…...