【问题标题】:Reducer that can be re-used in different branches of the same Redux state?可以在同一 Redux 状态的不同分支中重用的 Reducer?
【发布时间】:2021-03-28 01:40:28
【问题描述】:

我想知道是否有任何既定模式可以让 reducer 在同一个全局 Redux 状态的不同分支中重复使用?

典型的例子是分页。每个表格网格都有相同的参数,例如:datapageNumberpageSizesortBysortOrderfilters 等。拥有一个单独的减速器(和一组相应的操作)对于其中有网格的每个页面。应该有一种方法,只有一个并且能够在需要的地方重复使用它。

【问题讨论】:

  • 我不确定您在寻找什么。你所描述的听起来像是 Redux 的设计目的。这就是你要找的东西:codesandbox.io/s/lm57klz7z?file=/src/App.js?如果没有,请提供一些您的问题的示例代码。
  • 从我看到的你的例子中预取了所有产品,并且只使用搜索关键字点击后端。我说的是只获取特定页面和偏移量的数据的情况。因此,您实际上需要将所有参数发送到后端,并且需要将它们全部保持在 redux 状态。

标签: reactjs redux reducers


【解决方案1】:

是的,这是一个标准的 Redux 模式,称为 a "higher-order reducer"

【讨论】:

    【解决方案2】:

    在我工作的地方,我们创建了一个片段概念。例如,我们有一个 searchFragment,它具有过滤数据的操作。在这种情况下,我们创建了以下操作:

    • createSearchFragmentActions:负责创建一组带有作为参数发送的前缀的操作。
    • createSearchFragmentReducer:负责创建一个子reducer,其名称作为参数发送并处理调度的动作。
    • createSearchFragmentSelectors:如果你使用reselect,这个函数基本上是返回一组选择器来过滤创建的subreducer。

    【讨论】:

    • 这正是我实现的(带有前缀甚至函数的命名几乎完全一样:D),但我认为它有点笨重,所以正在寻找是否有更好的方法。我也没有设法在 TypeScript 中正确地对它进行类型安全。你有吗?
    • 否 =/ 我们在没有 TypeScript 的情况下实现了这一点
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-11-22
    • 2021-08-07
    • 1970-01-01
    • 2018-09-17
    • 2016-06-21
    • 1970-01-01
    • 2020-10-21
    相关资源
    最近更新 更多