在 Redux 中编写高阶减速器

2024-01-06

我创建了一些工厂函数,为我提供了简单(或更高级)的减速器。例如(简单一 - 基于动作类型集RequestState常数作为值):

export const reduceRequestState = (requestTypes: RequestActionTypes) =>
    (state: RequestState = RequestState.None, action: Action): RequestState => {
        switch (action.type) {
            case requestTypes.start:
                return RequestState.Waiting;
            case requestTypes.success:
                return RequestState.Success;
            case requestTypes.error:
                return RequestState.Error;
            case requestTypes.reset:
                return RequestState.None;
            default:
                return state;
        }
    };

使用这些工厂函数和combineReducers from redux我可以将它们组合成功能齐全的减速器来处理我的大部分休闲动作。这给了我可读的代码并防止我犯愚蠢的错误。

工厂对于常见操作很有用,但是当我需要添加一些自定义行为(对于操作类型)时,这应该显着修改存储的某些部分,我想编写一个减速器的自定义部分来为我处理该操作。 这个想法是以迭代的方式组合减速器,所以combineReducers但对于一个数组。这样我就可以使用我的工厂创建减速器,然后将其与处理某些特定操作的自定义减速器结合起来。这combineReducers对于数组,然后调用第一个数组,认识到没有任何更改并调用第二个(自定义)数组来处理该操作。

我正在寻找一些解决方案并发现redux-actions但不太喜欢它链接操作和化简器的方式,这使得语义与我习惯的没有什么不同。也许我不明白,但最终我喜欢看到我的减速器被编写为纯函数。

我正在寻找一些可以为我指明方向的提示。 是否有任何库或项目使用任何类型的高阶减速器并以某种方式组合它们? 像上面描述的那样组成减速器有什么缺点吗?


是的,因为减速器是just函数,组织逻辑的方式有无数种,将多个函数组合在一起就是非常受鼓舞.

您正在寻找的“数组中的减速器”想法是https://github.com/acdlite/reduce-reducers https://github.com/acdlite/reduce-reducers。我经常在我自己的应用程序中使用它来实现这种行为 - 运行combineReducers- 首先生成减速器,然后依次运行减速器以获得更具体的行为。

我为 Redux 文档编写了一个名为结构化减速器 http://redux.js.org/docs/recipes/StructuringReducers.html,其中涵盖了许多与减速器逻辑相关的主题。这包括超出平常的有用模式combineReducers方法。

我还有一份清单许多其他与减速器相关的实用程序 https://github.com/markerikson/redux-ecosystem-links/blob/master/reducers.md作为我的一部分Redux 插件目录 https://github.com/markerikson/redux-ecosystem-links.

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

在 Redux 中编写高阶减速器 的相关文章

随机推荐

  • Cocos2D 2.0 - 无数的 OpenGL 错误

    我正在将 Cocos2D 项目转换为 2 0 我使用Cocos2D 2 0模板 没有物理的简单模板 创建了一个空白项目 并将所有文件从旧项目转移到空白项目 我也将其转换为 ARC 我编译并没有看到任何错误 我运行该应用程序 它似乎运行正常
  • Thymeleaf:添加现有值而不是替换它们

    有没有办法告诉Thymeleaf将参数添加到标签而不是覆盖它们 Example div class a 应该导致 div class a b or div class a c Regards 另一种方法是 th attr class a x
  • Pandas to_datetime 不适用于空值

    是的 我会尽可能说清楚 这是我的数据框base varlist2 completion date latest completion date original customer birth date 1 0 07 10 2004 17 0
  • 将我的ApplicationsDbContext 与IdentityDbContext 结合使用MVC 5 没有定义键

    我将现有的 DBContext 与 MVC 5 中的新 IdentityDbContext 组合起来 我设法组合了这两个上下文 但是当我运行应用程序并创建模型时 出现以下错误消息 Context IdentityUserLogin Enti
  • 如何正确处理和保留系统关闭(和 SIGTERM)以完成 Python 中的工作?

    基本需求 我有一个 Python 守护进程 它通过 os system 调用另一个程序 我的愿望是能够正确处理系统关闭或SIGTERM 以便让被调用的程序返回然后退出 我已经尝试过的 我尝试过使用信号的方法 import signal ti
  • 如何调整 NumericVector 的大小?

    如何在 Rcpp 中调整大小NumericVector 当我使用push back为此 程序会变慢 但没有 resize or reserve 功能 当我已经有一个NumericVector有了所需的大小 我可以使用复制构造函数来获取正确的
  • CreateProcess 如何定位可执行文件?

    根据文档 创建进程 http msdn microsoft com en us library ms682425 28v vs 85 29 aspx可以传递可执行文件名称 作为第一个参数 或命令行作为第二个参数 从中 将提取可执行文件名称
  • Python 中的 Perl 兼容正则表达式 (PCRE)

    我必须在 Python 中解析一些基于 PCRE 的字符串 但我不知道该怎么做 我想要解析的字符串如下所示 match mysql m 0 0 0 n 4 w 0 0 s p MySQL i 1 在这个例子中 我必须获得这些不同的项目 m
  • 如何在c#中截断文件?

    我正在使用 Trace Writeln 函数将 C 程序完成的操作写入文件中 但文件变得太大 当这个文件增长到1MB时如何截断它 TextWriterTraceListener traceListener new TextWriterTra
  • 比较:reCaptcha 安全首选项

    比较 reCaptcha 安全首选项 任何人都可以向我指出文档 在其中我可以看到 对用户来说最简单 最安全 和 在 之间 之间的差异吗 谢谢 可用性和安全性之间始终存在斗争 人机交互讲师南江说道 https www wired co uk
  • 如何使用 Go 部分解析 JSON?

    我有以下 json app name name of app version 1 items type type of item inputs input1 value1 The items 0 inputs改变基于items 0 type
  • 使用条件语句从 pandas df 列中减去标量给出 ValueError: The true value of a Series is ambigacy

    我正在尝试执行 if df trades loc CASH 0 df trades loc CASH commission 然后我得到了错误 df trades loc CASH 是一列浮点数 我想减去标量commission从该列中的每个
  • 隐藏 Firefox 附加组件中的位置栏

    在我的附加组件中 我有一个在安装 更新时显示的 HTML 页面 Firefox 显然显示了页面的 chrome URI 我试图找出如何防止这种情况发生 只是出于美观原因 请注意 我知道某些附加组件能够隐藏某些选项卡 页面上的位置栏 它们是如
  • 是否可以在 VSCode 中使编辑器全屏拆分?

    我希望有能力制作多个之一split编辑器窗口全屏 我通常有两个带有代码的垂直分割窗口 这将很有用全屏缩放没有资源管理器终端和所有其他栏 只需代码 最初我有以下内容 但我想配置一个快捷方式使活动窗口全屏显示 如下所示 就像F11一样 关闭资源
  • 如何禁用表单提交按钮“a là Ruby on Rails Way”?

    我正在使用 Ruby on Rails 3 我想disable and 切换 CSS 类 of a form submit 当表单被 AJAX 提交时 直到 AJAX HTTP 请求完成 我正在使用 JavaScript 的默认 jQuer
  • R 从关注者列表中查找对用户推文的所有回复

    我试图找出用户对所有给定推文的回复数量 这不能直接从 Twitter 的 API 获得 我决定只关注用户关注者的回复 以帮助提炼生成的数据并作为一个很好的近似值 我相信对推文的大部分回复将直接来自该用户关注者 我相信我已经取得了很大的进步
  • Python 2.7.9 Mac OS 10.10.3 消息“setCanCycle:已弃用。请改用 setCollectionBehavior”

    这是我的第一条消息 我希望你能帮助我解决我的问题 当我启动 python 脚本时 我收到以下消息 2015 06 10 23 15 44 146 python 1044 19431 setCanCycle 已弃用 请改用 setCollec
  • 需要数据库结构建议

    我目前正在开发一个包含产品目录的网站 我对数据库设计有点陌生 所以我正在寻找有关如何最好地做到这一点的建议 我熟悉关系数据库设计 所以我理解 多对多 或 一对多 等 在大学学过很好的数据库课程 以下是一个项目可能被分类为的示例 Propel
  • 如何使 Uri.EscapeDataString 符合 RFC 3986

    Uri 类默认为 RFC 2396 对于 OpenID 和 OAuth 我需要与 RFC 3986 一致的 Uri 转义 来自System Uri 类文档 http msdn microsoft com en us library syst
  • 在 Redux 中编写高阶减速器

    我创建了一些工厂函数 为我提供了简单 或更高级 的减速器 例如 简单一 基于动作类型集RequestState常数作为值 export const reduceRequestState requestTypes RequestActionT