如何在 Redux 中定义 reducer 的执行顺序?

How to define the order of reducers execution in Redux?

假设我有操作 A,它被分派到减速器 R1R2。我还有智能组件 C,它被 connected 到 R1R2

返回的状态

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

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

*R1其实就是redux返回的results状态normalizrR2就是entities状态。 entities 需要对 results

进行非规范化

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

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

Is it possible that component C were rerendered when R1 is executed but before R2 is executed?

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

在 Redux 中,您将减速器与 combineReducers() 组合在一起。这意味着从 Redux 的角度来看,只有一个 reducer,而且是同步的。当然,它会调用你的两个 reducer,但是 Redux store 只有在从它的根 reducer 获得新的状态值后才开始通知订阅者,所以可以保证 你所有的 reducer 都已经在视图时执行了收到通知.