NGRX 相互嵌套多个功能模块?

Tom*_*atz 3 ngrx ngrx-effects ngrx-store angular7

目前我使用的商店是功能模块的扁平结构,即:

{
    feature_A: {
       A:'A',
       B:'B'
    },
    feature_B:{
        C:'C',
        D:'D'
    }
}
Run Code Online (Sandbox Code Playgroud)

但我想做的是:

{
    feature_A: {
       A:'A',
       B:'B',
       feature_B:{
        C:'C',
        D:'D'
      }
    }
}
Run Code Online (Sandbox Code Playgroud)

也许类似:App.Module

StoreModule.forFeature('feature_A', fromFeature_A.feature_A_Reducers)
StoreModule.forFeature('feature_A.feature_B', fromFeature_B.feature_B_Reducers)
Run Code Online (Sandbox Code Playgroud)

在网上寻找这个问题的答案时,除了建议保持功能模块的扁平结构之外,并没有真正找到真正的答案。

小智 6

中的功能模块ngrx只是对象根的直接状态,因此实际上不存在嵌套功能模块的想法。

相反,您可以通过仍然将功能 B 的状态抽象到不同的文件(reducers、actions、effects...)中来完成类似的行为,但将其视为功能 A 的子状态。

然后,您可以创建一个选择器来专门访问功能 B 的状态:

const selectFeatureA = createFeatureSelector('feature_A');
const selectFeatureB = createSelector(selectFeatureA, (state) => state.feature_B);
Run Code Online (Sandbox Code Playgroud)