angular - 是否应该触发所有减速器的 ngrx 操作
问题描述
我有一个非常简单的应用程序,并且是第一次使用 ngrx
减速器.module.ts
@NgModule({
imports:[
StoreModule.forRoot({
sliceA: AReducer,
sliceB: BReducer
})
]
})
Areducer.ts
export function AReducer(state, action : AActions) {
switch(...)
}
BReducer.ts
export function AReducer(state, action : BActions) {
switch(...)
}
一些组件.ts
store.dispatch(new AAction());
现在我希望ngrx 只会触发AReducer 而不是BReducer,但我看到它同时触发了两者。这也很不和谐,因为 BReducer 的第二个参数是一个 AAction,即使我将第二个参数参数化为类型 BAction。
那么有什么方法可以让 ngrx 只触发相关的减速器?还是它触发所有这些的设计,而无关紧要的只是微不足道的返回商店?
解决方案
据我了解,这是典型的NgRx
行为。对于,无论您在哪个文件中定义它们NgRx
,所有这些都是独立/不相关的。对于,您将使用不同的文件以使其可维护,但会为每个调度的操作遍历所有减速器。actions
reducers
NgRx
但是,您通常会在 a中做的reducer
是,当执行 acase
来处理操作时,如果您return
从 that 开始case
,则NgRx
停止寻找其余的 reducer。
所以在你的情况下:
export function AReducer(state, action : AActions) {
switch(action.type){
case actions.AAction:
return {...state} // this is when NgRx stops looking for the case to handle an action
}
}
推荐阅读
- r - 使用 mutate 函数在 PropCIs 包中提取置信区间的效果如何?
- c# - Roslyn 脚本入口点?
- database - 创建脚本以将多个表中的记录插入另一个表
- c# - 如何在c#中获取已创建进程的窗口ID?
- typescript - 打字稿:使用泛型将对象映射到另一个对象
- javascript - JavaScript 执行抛出“错误:eval 中的 OLE 自动化错误:未知名称或命名参数。” 在 MSW 上的 wx.html2.WebView
- jenkins - 如何在 Jenkins Node 中查看 Unstashed 文件列表
- android - 为什么不能使用pom文件中的maven依赖?
- django - Django多表继承:父数据未保存
- java - RabbitMQ JAVA Spring 配置 - spring.rabbitmq.ssl.key-store