【问题标题】:How to define the order of reducers execution in Redux?如何在 Redux 中定义 reducer 的执行顺序?
【发布时间】:2016-03-10 23:42:50
【问题描述】:

假设我有动作A,它被分派到reducer R1R2。我还有智能组件C,它是connected 到R1R2 返回的状态

R1 被执行但在R2 被执行之前,组件C 是否可能被重新渲染?

如果我只想在 R1R2 都执行时重新渲染 C 怎么办?或者是否可以告诉 Redux dispatcher 先将操作分派给 R2

*R1实际上是redux返回的results状态normalizrR2entities状态。 entities 是非规范化 results 所需要的

【问题讨论】:

    标签: reactjs redux


    【解决方案1】:

    是否可能在执行 R1 但在执行 R2 之前重新渲染了组件 C?

    不,如果您像 Redux 文档建议的那样使用单个商店,这是不可能的。

    在 Redux 中,您可以将 reducer 与 combineReducers() 结合使用。这意味着从 Redux 的角度来看,只有一个 reducer,而且是同步的。当然,它会调用你的两个 reducer,但 Redux 存储仅在从根 reducer 获取新状态值后才开始通知订阅者,因此可以保证 在通知视图时所有 reducer 都已执行

    【讨论】:

    • 我遇到了与此类似的情况,即调用选择器并由于未定义值而导致错误。该值基于由 2 个 reducer 处理的单个操作。容器的 mapStateToProps 函数中引用了该选择。对这个丹有什么见解吗?
    【解决方案2】:

    Redux 动作是同步调度的,所以动作的所有副作用都会在动作被调度后立即发生。这意味着您的组件只会重新渲染一次,因为即使您多次调用 setState,React 也不会在状态更改时立即重新渲染(它似乎会推迟到下一个事件循环或动画帧)。

    您可以通过简单地更改您调用store.dispatch 的顺序来定义调度顺序。如果您希望首先发生 R1 更改的所有副作用,请先致电 R1.dispatch

    【讨论】:

    • 问题是,R1 和 R2 都订阅了同一个动作 A。所以我不能分开调度
    猜你喜欢
    • 2020-09-25
    • 2018-01-12
    • 2020-10-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-01
    • 2018-11-08
    • 1970-01-01
    • 2020-04-06
    相关资源
    最近更新 更多