如何将Angular imports中StoreModule与EffectsModule配置改为单行写法
NgRx StoreModule多Feature单行合并写法
和EffectsModule可以直接合并多个Effect类到同一数组的逻辑不同,StoreModule每个feature state需要绑定独立的state切片名,不过框架原生提供了批量注册的重载,不需要分开写两次forFeature。
合并写法
把两个feature的配置封装为带name和reducer字段的对象,统一放到数组中传入forFeature即可,严格单行的代码如下:
StoreModule.forFeature([{name: 'job', reducer: jobTrackingListReducerMap}, {name: 'roleManagement', reducer: roleManagementReducerMap}]),
合并后完整的imports配置
imports: [ CommonModule, UiCommonsModule, AdminRoutingModule, EffectsModule.forFeature([JobListEffect, RoleManagementEffect]), StoreModule.forFeature([{name: 'job', reducer: jobTrackingListReducerMap}, {name: 'roleManagement', reducer: roleManagementReducerMap}]), ]
注意事项
- 这种写法和分开写两次
StoreModule.forFeature的运行效果完全一致,原有通过createFeatureSelector读取job、roleManagement切片的业务代码不需要做任何修改 - 不要直接把两个reducer map合并成一个对象传入单个
forFeature,否则会把两个独立state切片的字段混到同一个命名空间下,导致原有选值器失效、state结构混乱。
内容的提问来源于stack exchange,提问作者Benezir
相关产品推荐
相关产品推荐

