NgRx中处理Action A时派发Action B是否合规?状态更新顺序如何?
在NgReducer中派发Action是否合规?状态处理顺序说明
首先明确:在NgRx的Reducer中派发Action是不符合设计规范的。
核心原因
Reducer的本质是纯函数,它的唯一职责是接收当前状态和传入的Action,返回全新的状态。纯函数要求无副作用、相同输入始终得到相同输出,而派发Action属于副作用操作,完全违背了Reducer的设计原则。
若强行这么做的状态处理顺序
如果通过某种方式(比如在Reducer中直接调用store.dispatch())在处理Action A时派发Action B,NgRx的处理逻辑是:
- Action B会被立即加入到Action队列,但不会立即执行对应的Reducer
- 必须等Action A的Reducer完全执行完毕,Store完成状态更新后,才会从队列中取出Action B并执行其对应的Reducer
- 因此Action B的Reducer拿到的是Action A处理后的完整状态,不存在使用未完全更新状态的风险
正确的替代方案
如果需要在某个Action处理完成后触发另一个Action,应该使用NgRx的Effects来实现:
- 编写Effects监听目标Action(比如Action A)
- 在Effects的处理逻辑中派发后续Action(比如Action B)
- 这种方式既符合NgRx的架构设计,也能清晰地管理Action之间的触发关系
内容的提问来源于stack exchange,提问作者gturri
相关产品推荐
相关产品推荐

