redux中间件理解,常见的中间件,实现原理。

文章目录

  • 一、Redux中间件介绍
      • 1、什么是Redux中间件
      • 2、使用redux中间件

一、Redux中间件介绍

1、什么是Redux中间件

redux 提供了类似后端 Express 的中间件概念,本质的目的是提供第三方插件的模式,自定义拦截 action -> reducer 的过程。变为 action -> middlewares -> reducer 。这种机制可以让我们改变数据流,实现如异步 action ,action 过滤,日志输出,异常报告等功能。

通俗来说,redux中间件就是对dispatch的功能做了扩展。

先来看一下传统的redux执行流程:
请添加图片描述

2、使用redux中间件

(1) redux-thunk(redux异步管理中间件):thunk是一个很常用的redux中间件,应用它之后,我们可以dispatch一个方法,而不仅限于一个纯的action对象。
实现原理:

  1. 创建一个thunk中间件函数,它接受store作为参数,并返回一个函数,即thunk函数。
  2. 在Redux中间件链中使用thunk中间件函数。
  3. 当dispatch一个action时,Redux会检查action的类型是不是函数。如果是函数,则调用该函数,并将store的dispatch和getState方法作为参数传入。
  4. 在thunk函数中,可以执行异步操作,例如发起网络请求或者定时器操作。
  5. 异步操作完成后,可以调用store的dispatch方法来分发一个新的action,或者调用store的getState方法来获取当前的状态。
  6. Redux会将新的action传递给其他中间件或者reducer进行处理。

(2) redux-promise(redux异步管理中间件): Promise 则更适合于输入输出操作,比较fetch函数返回的结果就是一个Promise对象,
它的实现原理如下:

  1. 创建一个中间件函数,接收store作为参数。
  2. 返回一个新的函数,接收next作为参数。
  3. 返回一个新的函数,接收action作为参数。
  4. 判断action的类型,如果action的payload是一个Promise对象,则等待Promise对象的结果,并将结果作为新的payload派发一个新的action。
  5. 将新的action传递给next函数,继续执行后续的中间件或者Redux的dispatch函数。
  6. 如果action的payload不是一个Promise对象,则直接将action传递给next函数。

(3) redux-saga(redux异步管理中间件):redux-saga是一个管理redux应用异步操作的中间件,用于代替 redux-thunk 的。
redux-saga的实现原理如下:

  1. 创建saga middleware:通过调用redux-saga提供的createSagaMiddleware函数创建一个saga middleware。
  2. 启动saga middleware:在应用程序的主入口文件中,通过调用sagaMiddleware.run(rootSaga)启动saga middleware。rootSaga是一个Generator函数,它包含了所有的saga逻辑。
  3. 监听action:saga middleware会通过redux的store.dispatch方法来接收action。当一个action被dispatch时,saga middleware会检查是否有与该action相关的saga逻辑。
  4. 执行saga逻辑:当一个与action相关的saga逻辑被触发时,saga middleware会创建一个新的Generator实例来执行该saga逻辑。saga逻辑中的每一行代码都是一个yield表达式,用于控制异步操作的流程。
  5. 处理异步操作:当遇到一个yield表达式时,saga middleware会暂停当前的Generator实例,并执行yield表达式后面的异步操作。异步操作可以是一个Promise、一个回调函数、一个定时器等。
  6. 发起新的action:当异步操作完成时,saga middleware会再次通过redux的store.dispatch方法来发起一个新的action,这个新的action会被传递给reducer进行状态更新。
  7. 恢复Generator实例:当一个新的action被dispatch时,saga middleware会恢复之前暂停的Generator实例,并将新的action作为yield表达式的返回值。Generator实例会继续执行,直到遇到下一个yield表达式。
  8. 监听取消action:saga middleware还可以监听取消action,当一个取消action被dispatch时,saga middleware会取消正在执行的Generator实例,并清理相关的资源。

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

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

相关文章

【JavaEE基础学习打卡06】JDBC之进阶学习PreparedStatement

目录 前言一、PreparedStatement是什么二、重点理解预编译三、PreparedStatement基本使用四、Statement和PreparedStatement比较1.PreparedStatement效率高2.PreparedStatement无需拼接参数3.PreparedStatement防止SQL注入 总结 前言 📜 本系列教程适用于JavaWeb初学…

SpringMVC探秘: 实现MVC模式的Web应用

文章目录 1. SpringMVC概述1.1. 什么是SpringMVC?1.1.1. MVC与SpringMVC 1.2. SpringMVC项目的优势 2. SpringMVC项目的创建与使用2.1. 创建SpringMVC项目2.2. 设置路由2.3. 获取参数2.3.1. 获取一个参数2.3.2. 获取多个参数2.3.3. 获取日期参数2.3.4. 参数重命名Re…

mac地址、ip地址、子网掩码、端口

1. mac地址 又称为网络适配器或者网络接口卡NIC,但是现在更多人原因使用更简单的名称"网卡",通过网卡能够是不同的计算机之间相互连接,从而完成数据通信的功能 每一个网卡在出厂的时候 都会给分配到一个编号,类似与身份…

CSS中的vertical-align属性

vertical-align 1.CSS属性 - vertical-align 2.深入理解vertical-align – line boxes This property affects the vertical positioning inside a line box of the boxes generated by an inline-levelelement. 官方文档的翻译:vertical-align会影响 行内块级元素…

Android | 关于 OOM 的那些事儿

作者:345丶 前言 Android 系统对每个app都会有一个最大的内存限制,如果超出这个限制,就会抛出 OOM,也就是Out Of Memory 。本质上是抛出的一个异常,一般是在内存超出限制之后抛出的。最为常见的 OOM 就是内存泄露(大量…

Prompt-“设计提示模板:用更少数据实现预训练模型的卓越表现,助力Few-Shot和Zero-Shot任务”

Prompt任务(Prompt Tasks) 通过设计提示(prompt)模板,实现使用更少量的数据在预训练模型(Pretrained Model)上得到更好的效果,多用于:Few-Shot,Zero-Shot 等…

Spring Boot(Vue3+ElementPlus+Axios+MyBatisPlus+Spring Boot 前后端分离)【二】

😀前言 本篇博文是关于Spring Boot(Vue3ElementPlusAxiosMyBatisPlusSpring Boot 前后端分离)【二】的,希望你能够喜欢 🏠个人主页:晨犀主页 🧑个人简介:大家好,我是晨犀,希望我的文…

adb shell setprop 、开发者选项

App性能调试详解 Android App性能监控工具 更多系统属性参考 一、开启 GPU Render 的profiling bar: Gpu渲染速度 adb shell setprop debug.hwui.profile true adb shell setprop debug.hwui.profile visual_bars adb shell setprop debug.hwui.profile visual…

基于5G边缘网关的储能在线监测方案

近年以来,光伏、风力、水力发电等产业发展迅速,新能源在电力市场的占比持续增加,已经成为电力系统的重要组成部分。但由于光伏、风力、水力等发电方式存在天然的波动性,因此也需要配套储能、蓄能系统,保障新能源运行和…

股票预测和使用LSTM(长期-短期-记忆)的预测

一、说明 准确预测股市走势长期以来一直是投资者和交易员难以实现的目标。虽然多年来出现了无数的策略和模型,但有一种方法最近因其能够捕获历史数据中的复杂模式和依赖关系而获得了显着的关注:长短期记忆(LSTM)。利用深度学习的力…

UE4/5Niagara粒子特效之Niagara_Particles官方案例:2.4->3.2

之前的案例 UE4/5Niagara粒子特效之Niagara_Particles官方案例:1.1->1.4_多方通行8的博客-CSDN博客 UE4/5Niagara粒子特效之Niagara_Particles官方案例:1.5->2.3_多方通行8的博客-CSDN博客 2.4 Location Events 这次的项目和之…

自动化测试之Selenium

自动化测试Selenium介绍环境搭建如何操作浏览器定位元素css类选择器定位元素xpath定位元素css选择语法xpath选择语法 常用操作添加等待打印信息浏览器更多操作键盘事件鼠标事件特殊场景只选复选框iframe标签下拉框处理弹窗显示上传文件 关闭浏览器切换窗口截图 自动化测试 自动…

JavaSE 认识String类

目录 1 创建字符串2 字符串比较相等3 字符串常量池4 理解字符串不可变5 字符、字节与字符串5.1 字符与字符串5.2 字节与字符串5.3 小结 6 字符串常见操作6.1 字符串比较6.2 字符串查找6.3 字符串替换6.4 字符串拆分6.5 字符串截取6.6 其他操作方法 7 StringBuffer 和 StringBui…

【Linux】文件的描述符和重定向

文件的描述符和重定向 C语言的文件读写操作代码 open系统打开文件方法系统读写文件操作文件描述符文件重定向怎么理解文件缓冲区 C语言的文件读写操作 文件写入 fputs int fputs(const char *s, FILE *stream); s:要写入的字符串 stream:要写入对应的目标…

TCP最大连接数问题总结

最大TCP连接数量限制有:可用端口号数量、文件描述符数量、线程、内存、CPU等。每个TCP连接都需要以下资源,如图所示: 1、可用端口号限制 Q:一台主机可以有多少端口号?端口号与TCP连接?是否能修改&#x…

echarts 之 科技感进度条

1.图片展示 2.代码实现 /* ng qty 进度条 */ <template><div class"ngqty-progress"><div class"ngqty-info"><span>X4</span><span>50%</span></div><div :id"barNgQtyProgress index" c…

Java进阶(7)——手动实现LinkedList 内部node类的实现 增删改查的实现 toString方法 源码的初步理解

目录 引出从ArrayList到Linkedlist手动实现ArrayList从ArrayList到LinkedList 总体设计Node类Node的方法&#xff1a;根据index找node 增删改查的实现增加元素删除元素修改元素查询元素 toString方法完整代码List接口类LinkedList的实现测试类 总结 引出 1.linkedList的节点&am…

基于JJWT理解JWT,JWS,JWE

JWT &#xff0c; 全写JSON Web Token, 是开放的行业标准RFC7591&#xff0c;用来实现端到端安全验证. 从开发者理解的角度来说&#xff1a; JWT 是一个定义传递信息的标准JWT 的Token是一个Base64编码的字符串&#xff0c; 类似 eyJhbGciOiJIUzI1NyJ9.eyJzdWIiOiJvc2NhciJ9.…

房屋结构健康监测,科技助力让建筑更安全

房屋建筑是人们赖以生存的场所&#xff0c;然而当前我国许多房屋已经达到了使用寿命的中期&#xff0c;房屋的安全系数逐年降低&#xff0c;风险也随着时间的推移而累积。长期以来&#xff0c;我国的房屋普遍存在寿命短、隐患多的问题&#xff0c;“重建设&#xff0c;轻管理”…

探索PDF校对:为何这是现代数字文档的关键步骤

在今日的数字化浪潮中&#xff0c;文档的创建与分享从未如此频繁。尤其是PDF&#xff0c;作为一个普遍接受的标准文件格式&#xff0c;其在企业、学术和日常生活中的应用已经无处不在。但随之而来的挑战是如何确保文档的准确性和专业性。让我们深入探索PDF校对的重要性以及它为…