react18中redux-promise搭配redux-thunk完美简化异步数据操作

用过redux-thunk的应该知道,操作相对繁琐一点,dispatch本只可以出发plain objectredux-thunkdispatch可以返回一个函数。而redux-promise在此基础上大大简化了操作。

实现效果

请添加图片描述

关键逻辑代码

  • store/index.js
import { createStore, applyMiddleware } from "redux";
import { combineReducers } from "redux-immutable";
import { thunk } from "redux-thunk";
import { createLogger } from "redux-logger";
import reduxPromise from "redux-promise";
import reducer from "./reducer";const middleware = [thunk, reduxPromise];
const env = process.env.NODE_ENV;
if (env === "development") {middleware.push(createLogger({ collapsed: true }));
}const store = createStore(reducer, applyMiddleware(...middleware));export default store;
  • reucer.js
import { fromJS } from "immutable";
import { delay } from "../../utils";
const initstate = fromJS({list: [],count: 100,
});function storeReducers(state = initstate, action) {console.log("🚀 ~ storeReducers ~ action:", action);switch (action.type) {case "ADD":return state.updateIn(["count"], (n) => n + action.value);case "MINUS":return state.updateIn(["count"], (n) => n - action.value);default:return state;}
}export async function handleAdd() {await delay(2000);const data = await Promise.resolve(20);return { type: "ADD", value: data };
}export async function handleMinus() {await delay(2000);const data = await Promise.resolve(20);return { type: "MINUS", value: data };
}export default storeReducers;

可以发现在handleAdd里面写异步业务获取返回数据是可以正常执行的,功能完好。

当我们注释掉redux-promise中间件的配置好后,页面会立马报错。

import { createStore, applyMiddleware } from "redux";
import { combineReducers } from "redux-immutable";
import { thunk } from "redux-thunk";
import { createLogger } from "redux-logger";
// import reduxPromise from "redux-promise";
import reducer from "./reducer";// const middleware = [thunk, reduxPromise];
const middleware = [thunk];
const env = process.env.NODE_ENV;
if (env === "development") {middleware.push(createLogger({ collapsed: true }));
}const store = createStore(reducer, applyMiddleware(...middleware));
export default store;

在这里插入图片描述

  • 组件代码
import { Button, Dialog, setDefaultConfig, Space, Toast } from "antd-mobile";
import { http } from "../api/request";
import { useEffect } from "react";
import { useSelector, useDispatch } from "react-redux";
import { handleAdd, handleMinus } from "../store/reducer/store";
function Home() {const count = useSelector((state) => state.getIn(["store", "count"]));const dispatch = useDispatch();function handleAddCount() {dispatch(handleAdd());}function handleMinusCount() {dispatch(handleMinus());}return (<div className="home-box"><h2>home</h2><p>{count}</p><Space><Button color="primary" onClick={handleAddCount}>add</Button><Button color="danger" onClick={handleMinusCount}>minus</Button></Space></div>);
}
export default Home;

参考资料

  • https://github.com/redux-utilities/redux-promise

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/59333.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python批量合并excel文件

当工作中发现有多个excel表需要进行相同的操作或者需要汇总在一起&#xff0c;一个一个处理太费时间&#xff0c;以下的python代码能够帮你解决这个问题~ import pandas as pd import os# 设置Excel文件所在的文件夹路径和合并文件的输出路径 folder_path D:\\Desktop\\dat…

Qt中弹出窗口的实现与鼠标事件处理

在 Qt 开发中&#xff0c;弹出窗口&#xff08;Popup Window&#xff09;是一个常见的需求&#xff0c;例如下拉菜单、工具提示等。在实现弹出窗口时&#xff0c;我们通常会考虑使用 Qt::Popup 窗口类型&#xff0c;因为它可以自动处理许多细节&#xff0c;例如窗口的显示和关闭…

汇编语言与接口技术--算术运算程序设计

一、 实验要求 编程实现两个数&#xff1a;#998877H 和 #778899H 的加法运算。编程实现两个数&#xff1a;#998877H 和 #778899H 的减法运算。 二、 实验设计 1.整体思路 无符号角度&#xff1a; &#xff08;1&#xff09;加法 1.初始化&#xff1a;设置两个数 998877H 和…

(蓝桥杯C/C++)——基础算法(上)

目录 一、二分法 1.二分法简介 二分法简介-解题步骤 2.整数二分-简介 整数二分-模板 3.浮点二分-简介 浮点二分-模板 4.二分答案-简介 二分答案-模板​​​​​​​ 二、位运算 1.位运算简介 2.常见的位运算 按位与AND(&) 按位或OR( | ) 按位异或…

1-petalinux 问题记录-根文件系统分区问题

在MPSOC上使用SD第二分区配置根文件系统的时候&#xff0c;需要选择对应的bootargs&#xff0c;但是板子上有emmc和sd两个区域&#xff0c;至于配置哪一种mmcblk0就出现了问题&#xff0c;从vivado中的BlockDesign和MLK XCZU2CG原理图来看的话&#xff0c;我使用的SD卡应该属于…

CSS中的背景色和前景色

目录 1 对比度的计算1.1 亮度计算1.2 对比度比率 2 在线计算对比度 在我们的样式设计中&#xff0c;通常会有背景色和前景色的概念。前景色我们通常用来设置文本的颜色&#xff0c;而背景色通常是文本的所在容器的颜色。比如如果我们把文本放在普通容器里&#xff0c;那普通容器…

mac上的一些实用工具

一、录屏工具 快捷键&#xff1a;commandshift5 退出时候重复上面的快捷键即可看到操作键。 二、如何启用虚拟化技术&#xff08;VT) 1、检查VT支持情况 终端输入sysctl -a|grep machdep.cpu.features,如果输出结果包含VMX,则说明你的Mac支持VT 2、检查Hypervisor.frramew…

docker复现pytorch_cyclegan

1、安装docker 配置docker镜像 添加镜像源至docker engine 2、wsl2安装nvidia-docker 要在Ubuntu中安装NVIDIA Docker&#xff0c;需要满足以下条件&#xff1a; 确保主机已安装NVIDIA的CUDA驱动程序&#xff0c;并使用适用于您操作系统的正确版本。 wsl --update在Ubuntu…

全面解析:区块链技术及其应用

&#x1f493; 博客主页&#xff1a;瑕疵的CSDN主页 &#x1f4dd; Gitee主页&#xff1a;瑕疵的gitee主页 ⏩ 文章专栏&#xff1a;《热点资讯》 全面解析&#xff1a;区块链技术及其应用 全面解析&#xff1a;区块链技术及其应用 全面解析&#xff1a;区块链技术及其应用 区…

[Redis] Redis主从复制模式

&#x1f338;个人主页:https://blog.csdn.net/2301_80050796?spm1000.2115.3001.5343 &#x1f3f5;️热门专栏: &#x1f9ca; Java基本语法(97平均质量分)https://blog.csdn.net/2301_80050796/category_12615970.html?spm1001.2014.3001.5482 &#x1f355; Collection与…

独孤思维:图书电商远程诊断,差点晕倒

01 刚才一个图书学员想让我远程诊断下。 主要问题是&#xff0c;他用批量工具遇到问题&#xff0c;无法获取批量数据。 我远程一看&#xff0c;差点晕倒。 连工具都用错了&#xff0c;当然无法批量获取。 我说你仔细再看下专栏内容。 真的服了。 所以为什么有些人做不起…

十四届蓝桥杯STEMA考试Python真题试卷第二套第二题

来源&#xff1a;十四届蓝桥杯STEMA考试Python真题试卷第二套编程第二题。虽然不建议&#xff0c;但是我们还是给出一行代码的实现&#xff0c;以展现Python的简洁。 题目描述&#xff1a; 空调遥控器上的模式按钮可控制四种模式的切换。空调的初始模式为制热模式&#xff0c;…

C02S10-Linux的进程和计划任务管理

一、进程 1. 相关概念 程序&#xff1a;没有运行的代码&#xff0c;是指令和规则的集合&#xff0c;定义了要执行和操作的任务。进程&#xff1a;正在运行的代码&#xff0c;是程序的执行实例。线程&#xff1a;是计算机进行运算的最小单位&#xff0c;是进程中实际允许的单位…

初始JavaEE篇——多线程(8):JUC的组件

找往期文章包括但不限于本期文章中不懂的知识点&#xff1a; 个人主页&#xff1a;我要学编程程(ಥ_ಥ)-CSDN博客 所属专栏&#xff1a;JavaEE 目录 Callable接口 ReentrantLock synchronized 与 ReentrantLock的区别 信号量&#xff08;Semaphore&#xff09; CountDown…

C++ <string> 标头文件详解

目录 1. <string> 的基本介绍2. 创建和初始化字符串3. 字符串的基本操作3.1 连接字符串3.2 获取字符串长度3.3 访问和修改字符3.4 字符串比较 4. 常用字符串成员函数4.1 append()4.2 insert()4.3 erase()4.4 substr()4.5 find() 和 rfind()4.6 replace() 5. 字符串转换5.…

Java实现JWT登录认证

文章目录 什么是JWT?为什么需要令牌?如何实现?添加依赖&#xff1a;JwtUtils.java&#xff08;生成、解析Token的工具类&#xff09;jwt配置&#xff1a;登录业务逻辑&#xff1a;其他关联代码&#xff1a;测试&#xff1a; 什么是JWT? JWT&#xff08;Json Web Token&…

Meta AR 眼镜团队前负责人加入 OpenAI;visionOS 2.2 Beta 引入超宽屏投屏模式丨 RTE 开发者日报

开发者朋友们大家好&#xff1a; 这里是 「RTE 开发者日报」 &#xff0c;每天和大家一起看新闻、聊八卦。我们的社区编辑团队会整理分享 RTE&#xff08;Real-Time Engagement&#xff09;领域内「有话题的 新闻 」、「有态度的 观点 」、「有意思的数据」、「有思考的 文章 …

如何对LabVIEW软件进行性能评估?

对LabVIEW软件进行性能评估&#xff0c;可以从以下几个方面着手&#xff0c;通过定量与定性分析&#xff0c;全面了解软件在实际应用中的表现。这些评估方法适用于确保LabVIEW程序的运行效率、稳定性和可维护性。 一、响应时间和执行效率 时间戳测量&#xff1a;使用LabVIEW的时…

鸢尾博客项目开源

1.博客介绍 鸢尾博客是一个基于Spring BootVue3 TypeScript ViteJavaFx的客户端和服务器端的博客系统。项目采用前端与后端分离&#xff0c;支持移动端自适应&#xff0c;配有完备的前台和后台管理功能。后端使用Sa-Token进行权限管理,支持动态菜单权限&#xff0c;服务健康…

mysql中InnoDB索引与MyISAM索引

mysql索引 InnoDB 索引存储 主键索引&#xff08;聚簇索引&#xff09; 定义&#xff1a;主键索引是 InnoDB 存储引擎的聚簇索引&#xff0c;它决定了表中数据的物理存储顺序。每个 InnoDB 表都有一个且仅有一个聚簇索引。存储&#xff1a;主键索引的叶子节点直接包含表的数…