Redux 错误处理

news2025/1/31 22:45:36

Redux 错误处理

这两天正好收尾一个 Redux 页面的重构,碰到了一些错误处理的方式,这里就写个笔记总结一下碰到的问题和几种处理方式

大体上是分为同步函数和异步函数两个方面去处理

同步函数

这个是指的是直接在 reducer 中进行操作,可以是 extraReducers 或者是 reducer

throw exception

user may interae with UI then trigger some error, in this case, the state may not need to be updated

我之前有用过这个,不过后面因为应用场景不太符合的关系修改了一部分操作,大致实现如下:

createSlice({
  reducers: {
    // 属于有使用场景的
    someAction() {
      throw new Error('some error');
    },
  },
  // 这个用法其实不太好……
  extraReducers(builder) {
    builder.addCase(someAsyncAction.rejected, (state, action) => {
      state.isLoading = false;
      state.error = action.error;
      throw new Error('state.error');
    });
  },
});

这种应用场景其实比较少,我能想到的大概就触发一些成功之前不会造成状态变化的应用案例需要使用异常的方式解决。

其中最大的一个问题就在于,一旦跑出异常后,它的状态更新就失败了,如 extraReducers 中的操作,如果只是为了抛异常的话,其实 redux 的状态不会有任何的变化。

这也是之后我决定使用其他的方式解决异步异常的问题,因为一旦 loading 的状态没有办法 toggle,就相当于整个页面卡在了 freeze 的状态

使用状态去管理

这个就是比较常规的处理方式了,依旧以上面的代码为例,在组件中我可以从状态中获取 isLoadingerror 这两个状态。相对应的,我也可以在组件中通过对这两个状态进行检查而更新页面的渲染状态。

isLoading 的时候页面渲染旋转的符号,有 error 的时候页面弹出报错框等,这种都属于根据状态去管理页面的状态。

这个情况大概可以解决 70-80%的正常业务。

异步函数

这个主要是针对 asyncThunk 解决的问题,如果没有使用 asyncThunk 的话,可能还是要退回上一步去解决。

说一下碰到的业务场景:

用户操作表单
发送请求
成功
失败
关闭表单
提示信息

基本上说,如果用户操作表单失败的情况下,表单的状态需要维持在一个 开启 的状态,同时因为整个页面会有多种类型的表单操作,因此单纯依靠 loadingerror 的操作就变得非常的麻烦

我在 log 了一下 await asyncOps() 的操作后发现它的返回值是一个很好用的操作,如:

在这里插入图片描述

这里可以通过 meta 获取异步调用的状态,从而指导应该进行什么操作:

if (res.meta.requestStatus === 'fulfilled') {
  // 如果需要更新其他关联数据
  dispatch(someOtherCalls(somePayload));
  closeModal();
}

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

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

相关文章

基于springboot实现医疗服务系统项目【项目源码+论文说明】计算机毕业设计

摘要 随着社会的发展,社会的各行各业都在利用信息化时代的优势。计算机的优势和普及使得各种信息系统的开发成为必需。 医疗服务系统,主要的模块包括查看管理员;首页、个人中心、普通村民管理、乡村医生管理、公告信息管理、乡村诊室管理、…

抖音店铺提供优质服务|成都瀚网科技

抖音是中国领先的电子商务平台。为了帮助商家增加销量和品牌曝光度,抖音推出了精选联盟计划。精选联盟是由优质商家组成的联盟,旨在为消费者提供更多优质、高性价比的产品选择。那么,如何使用抖店开通精选联盟呢?这将在下面详细描…

计算机中了360后缀勒索病毒怎么办?360勒索病毒解密数据恢复

最近一段时间360后缀勒索病毒变得异常嚣张,时不时就会攻击企业的计算机服务器,导致众多的企业服务器被360后缀勒索病毒攻击。360后缀的勒索病毒并非360公司,是黑客专门具有针对性地研发的勒索病毒,通过加密企业的计算机给企业带来…

Docker容器与虚拟化技术:DaoCloud账户注册

目录 一、实验 1.DaoCloud 一、实验 1.DaoCloud (1)概念 DaoCloud是企业级容器云平台,它提供了一套容器集群解决方案,Daocloud可以管理你的计算资源,包括物理机和公有云环境,你可以在DaoCloud平台上部…

基于springboot实现音乐网站与分享平台项目【项目源码+论文说明】计算机毕业设计

摘要 本论文主要论述了如何使用JAVA语言开发一个音乐网站与分享平台 ,本系统将严格按照软件开发流程进行各个阶段的工作,采用B/S架构,面向对象编程思想进行项目开发。在引言中,作者将论述音乐网站与分享平台的当前背景以及系统开…

C++桶排序算法的应用:存在重复元素 III

题目 给你一个整数数组 nums 和两个整数 indexDiff 和 valueDiff 。 找出满足下述条件的下标对 (i, j)&#xff1a; i ! j, abs(i - j) < indexDiff abs(nums[i] - nums[j]) < valueDiff 如果存在&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false 。 示例…

在不安全的集群上启用 Elasticsearch Xpack 安全性

本博文详细描述如何把一个没有启动安全的 Elasticsearch 集群升级为一个带有 HTTPS 访问的启用 Elasticsearch xpack 安全的集群。 为了增强 Elasticsearch 集群的安全性&#xff0c;你需要执行完全集群重启&#xff0c;并在客户端进行一些更改。 启用身份验证后&#xff0c;所…

分析谐波失真

目录 简介 查看非线性的影响 量化非线性失真 降低谐波失真的输入衰减 SNR THD 和 SINAD 当作输入衰减的函数 用于消除失真的后处理 组合方法 总结 此示例说明如何分析在具有噪声的情况下弱非线性系统的谐波失真。 简介 在此示例中&#xff0c;我们将研究放大器的简化模…

推荐动漫《头文字D》

《头文字D》是漫画家重野秀一作画的青年漫画&#xff0c;从1995年开始在《周刊Young Magazine》上连载&#xff0c;于2013年7月29日完结&#xff0c;电子版由漫番漫画连载 [1] 。已被改编成同名动画和电影&#xff0c;还有多本探讨汽车驾驶技巧的周边专书。头文字D漫画刚出版即…

机器学习: 初探 定义与应用场景

机器学习 第一课 初探 定义与应用场景 机器学习 第一课 初探 定义与应用场景机器学习的历史机器学习为什么重要?机器学习的定义机器学习在日常生活中的应用推荐系统语音识别图像识别 商业领域的机器学习金融风险评估股票市场预测客户关系管理 机器学习在医疗领域的应用疾病预测…

9、Docker 安装 Redis

1、下载镜像 docker pull redis:3.2.10 2、本机创建redis目录并修改配置文件 1&#xff09;创建目录 mkdir /usr/local/redis 2&#xff09;进入redis目录 cd /usr/local/redis 3&#xff09;创建data目录 mkdir data 4&#xff09;创建redis.conf文件 vi redis.conf 5&a…

人工智能轨道交通行业周刊-第63期(2023.10.9-10.15)

本期关键词&#xff1a;一体化智慧列车运行系统、车辆数字化运维管理、智能传感器、PHM、LKJ 1 整理涉及公众号名单 1.1 行业类 RT轨道交通人民铁道世界轨道交通资讯网铁路信号技术交流北京铁路轨道交通网上榜铁路视点ITS World轨道交通联盟VSTR铁路与城市轨道交通RailMetro…

数据结构之手撕顺序表(增删查改等)

0.引言 在本章之后&#xff0c;就要求大家对于指针、结构体、动态开辟等相关的知识要熟练的掌握&#xff0c;如果有小伙伴对上面相关的知识还不是很清晰&#xff0c;要先弄明白再过来接着学习哦&#xff01; 那进入正题&#xff0c;在讲解顺序表之前&#xff0c;我们先来介绍…

【HCIP】HCIA复习

目录 大纲 情景代入 访问百度/谷歌服务器的准备工作 1、计算机网络发展第一阶段人机交互的加工过程 2、OSI参考模型 3、TCP/IP参考模型 访问谷歌&#xff08;百度&#xff09;服务器的流程 1、主机需要一个IP地址才能上网&#xff08;本场景中通过DHCP服务获取IP地址&a…

【面试题解析】搜狐畅游:Redis IO多路复用中select、poll和epoll有何区别?

大家好&#xff0c;我是小米&#xff0c;今天给大家分享一个我在搜狐畅游面试中被问到的问题&#xff1a;请说一下 Redis 的 IO 多路复用中 select、poll、epoll之间的区别是什么&#xff1f;为了更好地回答这个问题&#xff0c;我将从以下几个角度进行阐述&#xff1a;概念简介…

CANoe仿真面板设计

CANoe仿真面板设计 CANoe Panel介绍关键步骤操作步骤添加系统变量添加Control面板添加Display面板 创建Desktop CANoe Panel介绍 panel(面板〕是CA№e的一个重要功能&#xff0c;为总线仿真提供了图形化的界面。用户可以在面板上添加合适的控件实时地改变信号或变量的值。 控件…

无人机新手防炸飞行技巧

不要在室内飞行,容易撞墙。起飞前设置好避障和返航模式。使用模拟器熟练掌握操控。选择开阔环境目视起飞。使用低速档平稳飞行。合理使用避障功能,不要盲目依赖。使用九宫格避障法。留意电量,及时返航。极低电量时放弃强行返航。飞行后及时为电池充电保养。

基于springboot实现音乐网站与分享平台项目【项目源码+论文说明】

摘要 本论文主要论述了如何使用JAVA语言开发一个音乐网站与分享平台 &#xff0c;本系统将严格按照软件开发流程进行各个阶段的工作&#xff0c;采用B/S架构&#xff0c;面向对象编程思想进行项目开发。在引言中&#xff0c;作者将论述音乐网站与分享平台的当前背景以及系统开…

oppo A57刷机包更新

ozip转zip方便把官网下载的ozip包转换为可刷机的zip sdat2img-master方便发烧友制作system.img详情请看redmi.txt

finalshell连接虚拟机中的ubuntu

finalshell下载地址: https://www.finalshell.org/ubuntu设置root密码&#xff1a; sudo passwd rootubuntu关闭防火墙&#xff1a; sudo ufw disable安装ssh # sudo apt update #更新数据(可以不执行) # sudo apt upgrade #更新软件(可以不执行) sudo apt install open…