浅析Redux 的 store enhancer

2023-11-11

相信大家都知道Redux的middleware(中间件)的概念,Redux通过middleware可以完成发送异步action(网络请求)、打印action的日志等功能。相对而言,Redux的store enhancer的概念,很多人并不是很清楚。

1. 基本概念及使用

Redux通过API createStore创建store,createStore的函数签名如下:

createStore(reducer, [preloadedState], [enhancer])

其中,第3个可选参数enhancer,就是指的store enhancer。

store enhancer,可以翻译成store的增强器,顾名思义,就是增强store的功能。一个store enhancer,实际上就是一个高阶函数,它的参数是创建store的函数(store creator),返回值是一个可以创建功能更加强大的store的函数(enhanced store creator),这和React中的高阶组件的概念很相似。

store enhancer 函数的结构一般如下:

function enhancerCreator() {
  return createStore => (...args) => {
    // do something based old store
    // return a new enhanced store
  }
}

注意,enhancerCreator是用于创建store enhancer 的函数,也就是说enhancerCreator的执行结果才是一个store enhancer。(…args) 参数代表创建store所需的参数,也就是createStore接收的参数,实际上就是(reducer, [preloadedState], [enhancer])。

现在,我们来创建一个store enhancer,用于输出发送的action的信息和state的变化:

// autoLogger.js
// store enhancer
export default function autoLogger() {
  return createStore
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

浅析Redux 的 store enhancer 的相关文章

  • 由于 apollo-client 未定义,无法解构 GraphQL 查询?

    我正在寻找调试与错误消息相关的问题 未捕获的类型错误 无法解构 0 apollo client WEBPACK IMPORTED MODULE 4 useQuery 因为它未定义 Context 我正在为我的 React js 项目设置后端
  • Cypress 在 Create React App 中返回 .scss 文件的 webpack 编译错误

    我正在尝试将 Cypress 添加到非常基本的 CRA 但遇到了 Cypress 无法理解 scss 文件的问题 当我跑步时npm run cypress运行测试 我收到以下错误 Error Webpack Compilation Erro
  • redux 和 React 中减速器的先前状态

    这是我的减速器的样子 export default function catalogReducer state initialState catalogItems action switch action type case types L
  • redux-observable 中的独立链取消?

    我是 RxJS 新手 在我的应用程序中 我需要独立取消延迟操作 Here s http jsbin com gayoti edit js output一个工作示例 延迟为 3 秒 但是当我选择删除多个项目并取消其中一项时 然后一次全部取消
  • Next.js - 如何使用 Provider 来包装路由并使用 Context 和 Hooks

    我在 create react app 中编写了类似于以下的代码 我想知道 next js 的等效代码 下面的代码是我尝试拥有一个可用于所有页面的全局上下文 提供者包装链接 我没有收到任何错误 问题出在里面about当我期望上下文状态时 页
  • useState 以 `new` 关键字作为参数

    我正在构建一个单独的服务来处理复杂的事情 该服务是一个类 只是为了测试建议 我在一个内部模拟useState 重点是我忘记了一个console log在构造函数内部 并意识到类构造函数在组件重新渲染时被调用多次 这种行为不会导致意外的行为或
  • Typescript 和 React 使用空类型数组设置初始状态

    假设我有以下片段 interface State alarms Alarm export default class Alarms extends React Component lt State gt state alarms 因为我想设
  • 通过 Javascript 填充 ReactJS HTML 表单

    我正在开发一个应用程序 在打开第 3 方网站后 我可以在浏览器上下文中运行我自己的 Javascript 作为一个基于reactjs构建并具有登录表单的示例网站 您可以参考此链接 我正在尝试在reactjs生成的表单中填写用户名和密码 但是
  • 如何使用 next.js 将动态 html 元素注入到页面?

    如何使用next js动态注入html元素到页面 这些元素未知类型 例如 输入 复选框 img 使用返回 json 类型的 api 指定此元素 如下所示 id rooms title Rooms order 1 type string wi
  • 如何使用 Jest 测试 React 渲染的异步数据?

    我使用 React 进行渲染 使用 Jest Jasmine 进行测试 我用旧的 Jest Jasmine 编写了测试waitsFor and runs但这些现在在 Jasmine 2 中已经消失了 我不知道如何用新的替换done asyn
  • React router.push 和 router.replace 之间的区别?

    有什么区别React 路由器推送 and 路由器 替换 路由器历史记录就像一个stack of routes 当您使用router replace 您将覆盖堆栈的顶部 当使用router push 它在顶部添加了一条新路线stack 路由器
  • Apollo 客户端延迟刷新

    In Apollo Client v3React 实现 我使用钩子来使用订阅 当我从订阅接收数据时 我想重新获取查询 但前提是查询之前已执行过并且位于缓存中 有办法实现这一点吗 我首先进行惰性查询 然后在收到订阅数据时手动检查缓存 然后尝试
  • AppBar 在 React 路由之间消失

    我有一个几乎可以工作的简单反应路由项目 我有一个AppBar and a Drawer 使用穆伊 抽屉里有三个项目 它们将重新路由应用程序 我的路由工作正常 但我遇到的问题是AppBar 因此一旦您进入某个页面 应用程序其余部分的导航就不再
  • 如何在反应中循环

    如何循环重复 这是我的代码 这是App js import React from react import App css import Child from Child Child function App return div div
  • React 文件预览 (FIREBASE)

    我目前将文件存储在 Firebase 存储中 我希望能够实时生成每个文件的文件预览 映射 例如 PDF 文件会将第一页显示为图像 docx 将是文档的第一页 pptx 将是第一张幻灯片 未知文档将是默认文档符号 有人知道有什么好的服务可以轻
  • React Material UI CardMedia 视频组件未播放

    我看到缩略图 但无法启动或停止视频 还有什么方法可以让它自动播放和重复吗 https material ui com api card media https material ui com api card media
  • React:隐藏特定路由上的组件

    新的反应 我有一个
  • 使用 useReducers 调度函数发送多个操作?

    使用时是否可以通过调度函数发送多个动作useReducer挂钩反应 我尝试向它传递一组操作 但这会引发未处理的运行时异常 明确地说 通常会有一个初始状态对象和一个减速器 如下所示 const initialState message1 nu
  • React - 无法读取未定义的属性[重复]

    这个问题在这里已经有答案了 通常 当我单击子组件中的菜单项时 它会调用 this handlesort 这是一个本地函数 处理排序从我的父组件中获取 onReorder 属性 onReorder 调用名为 reOrder 的本地函数 它设置
  • 如何使用tampermonkey模拟react应用程序中的点击?

    我正在尝试使用 Tampermonkey 脚本模拟对 React 元素的点击 不幸的是 由于 React 有自己的影子 DOM 所以天真的方法使用document querySelector 不工作 我遇到了一些需要修改 React 组件本

随机推荐

  • ubuntu 文件删除后磁盘没有释放

    磁盘满了 删除文件后df发现没有变化 base root xddz df h Filesystem Size Used Avail Use Mounted on udev 32G 0 32G 0 dev tmpfs 6 3G 2 8M 6
  • 在JDBC连接池中启动Oracle RAC的TAF

    Oracle RAC 的一个负责故障切换处理的主要组件是透明应用程序故障切换 TAF 选件 下面列举通过JDBC实现的透明应用程序故障切换的代码 more Tele zhou Class forName oracle jdbc driver
  • RabbitMq结合springBoot实现延时任务

    简介 rabbitMQ延时任务的实现思想 rabbitmq实现延时任务本质就是使用 过期时间 和 死信队列 实现的 首先定义一个死信队列和死信队列的消费者 这个死信队列用来接收延时队列过期的消息 死信队列消费者用来接收到过期消息后就进行消费
  • FFmpeg中调用av_read_frame函数导致的内存泄漏问题

    使用FFmpeg的av read frame函数后 每读完一个packet 必须调用av packet unref函数进行内存释放 否则会导致内存释泄漏 在vs 博主所用的ffmpeg版本是3 4 2 vs版本是vs2015 中编译运行如下
  • [语义分割]基于VGG网络搭建FCN-8s并在VOC2012数据集上训练

    文章目录 1 数据集选取 1 1数据集简介 1 2 数据预处理 1 2 1踩坑记录1 1 2 2 读取图片路径 1 2 3 自定义图像增强与预处理模块 1 3自定义数据集类 1 3 1数据标签可视化 2 搭建FCN 8s网络 2 1基础FC
  • uni-app组件传值

    目录 一 父组件给子组件传值 父组件 elementFather vue 子组件 element vue 效果图 二 子组件给父组件传值 子组件 element vue 父组件 elementFather vue 效果图 三 兄弟组件之间传
  • 用jupyter读取mysql中的数据的两种方式

    不管是采用哪种方式都应该先保证创建了目标数据库 即在mysql data文件夹下有以目标数据库名称命名的子文件夹 且子表应该为以下格式 而不是 sql 未执行命令 文件 首选方法二 因为仅SQLAlchemy可连接支持read sql ta
  • img src 使用base64格式 上传、根据文件名显示所有图片 java代码

    最近在做ca签名 key验证通过后传图片为base64格式图片 保存至自己服务器 大概操作 首先获取的src data image png base64 sealBase64 获取到的参数 function qr var base64 im
  • 配置uni-app的开发环境

    点击下载安装Hbuilderx 点击下载微信开发者工具 安装完成后下载导入一些插件依赖 这里用scss举例 https ext dcloud net cn plugin name compile node sass 新建项目 目录结构如下
  • C++ OSD水印叠加

    视频相关领域 监控 LED大屏 很多场合可能会涉及到在一幅画面上进行文字或时间的叠加 常规做法都是在后端实现 即先渲染图像 然后叠加OSD文字信息 这种方法简单且高效 但是有些场合必须要求在前端进行叠加 比如监控领域中视频名称信息 时间信息
  • WMware创建linux虚拟机并配置网络及防火墙

    1 打开VMware并创建虚拟机 基本一直下一步就行了 这里不多做说明了 名称随便取 最好就是master 位置放在自己预定的地方 这些配置参数随便设 差不多就行 创建到此为止 接下来安装linux系统 上下键选择 回车键确定 为了表现专业
  • ERP服务器端安装及配置

    概述 在配置ERP端是 普实系统集成工具同MES端配置时使用的程序类似 不硬性规定在哪台服务器上安装 只要能够连上ERP服务器即可 安装过程类似于系统集成工具 安装完成后 在开始中的菜单文件夹为Pushsoft Intergration 操
  • 锤子剪刀布游戏

    问题描述 大家应该都会玩 锤子剪刀布 的游戏 两人同时给出手势 胜负规则如图所示 现给出两人的交锋记录 请统计双方的胜 平 负次数 并且给出双方分别出什么手势的胜算最大 输入 输入第1行给出正整数N lt 105 即双方交锋的次数 随后N行
  • RC4文件加密的Python实现方法

    RC4 Rivest Cipher 4 是一种流密码 stream cipher 算法 广泛应用于网络通信和数据加密中 本文将介绍如何使用Python实现RC4文件加密算法 RC4算法的核心是使用一个伪随机数生成器 PRNG 生成密钥流 然
  • 端口显示被占用,如何关闭端口

    用管理员权限打开命令提示符 如果要关闭3306端口 首先要查询此端口号对应的PID 则输入以下命令 1 输入 netstat ano findstr 3306 然后借助命令终止PID对应的进程 输入以下命令 2 输入 taskkill PI
  • 【C++简明教程】Python和C++指定元素排序比较

    Python 中的排序 在 Python 中 常用的排序就是 sorted 对于列表这种数据结构来说 还有 sort 方法 列表的排序 使用 sort 方法进行排序 以第二个值进行升序排序 列表的 sort 方法是原地排序 另外一种排序方法
  • CMake的使用--以ORCA避碰C++库为例

    1 安装cmake 链接 Download CMake 版本需下载Binary distributions这个模块下的 Windows x64 Installer cmake 3 27 1 windows x86 64 msi 注意事项 1
  • CentOS6.5 安装 抓包工具tcpdump

    1 裸机没装GCC 离线安装 首先到http vault centos org 6 5 os x86 64 Packages 下载用到的rpm包 包括 ppl 0 10 2 11 el6 x86 64 rpm cloog ppl 0 15
  • LabVIEW自带函数Database Toolkit实现SQL Server操作(上)

    目录 一 函数位置 二 函数一览 三 主要介绍 1 DB Tool Open Connection vi 2 DBTool Close Connection vi 3 Database Variant To Data vi 4 DBTool
  • 浅析Redux 的 store enhancer

    相信大家都知道Redux的middleware 中间件 的概念 Redux通过middleware可以完成发送异步action 网络请求 打印action的日志等功能 相对而言 Redux的store enhancer的概念 很多人并不是很