我已经努力了 2 天来编写 featureA(“场景”)模块和嵌套的 featureB(“意图”)模块的状态。
这是我的状态所需的结构(结构 1):
{
authentication: { ... },
router: { ... },
scenarios: {
resources: { ids: { ... }, entities: { ... } },
intents: {
resources: { ids: { ... }, entities: { ... } }
}
}
}
我也很高兴(结构2):
{
authentication: { ... },
router: { ... },
scenarios: { ids: { ... }, entities: { ... } },
intents: { ids: { ... }, entities: { ... } },
}
虽然它不反映我的模块的结构。
结构 1 的问题是scenarios/reducers/index.ts
暴露了 a ActionReducerMap
,scenarios/modules/intents/reducers/index.ts
也暴露了 a ActionReducerMap
,我不知道如何组合它们。由于类型冲突,我尝试的所有内容甚至都无法编译。
结构 2 的问题在于,由于在第一页加载时没有加载,并且应用程序的其他 reducer 正在执行它们的工作intents
,因此状态的一部分一直被退出状态。IntentsModule
这是代码:
/scenarios/scenarios.module.ts:
import { reducers, getInitialState } from './reducers';
@NgModule({
imports: [
...,
ScenariosRoutingModule,
StoreModule.forFeature('scenarios', reducers, { initialState: getInitialState }),
EffectsModule.forFeature([ScenariosEffects]),
],
})
export class ScenariosModule {}
/scenarios/reducers/index.ts:
import * as fromRoot from '../../../app.reducers';
import * as fromScenarios from './scenarios.reducers';
import * as fromIntents from '../modules/intents/reducers';
export interface ScenariosState {
resources: fromScenarios.State;
intents: fromIntents.IntentsState;
}
export interface State extends fromRoot.State {
scenarios: ScenariosState;
}
export const reducers: ActionReducerMap<ScenariosState> = {
resources: fromScenarios.reducer,
intents: fromIntents.reducers, <-- This is the part with types conflicts
};
/scenarios/modules/intents/intents.module:
import { reducers, getInitialState } from './reducers';
@NgModule({
imports: [
...,
IntentsRoutingModule,
StoreModule.forFeature('intents', reducers, { initialState: getInitialState }), <-- Also this part seems to add 'intents' as a top-level property of state
EffectsModule.forFeature([IntentsEffects]),
],
})
export class IntentsModule {}
/scenarios/modules/intents/reducers/index.ts:
import * as fromIntents from './intents.reducers';
export interface IntentsState {
resources: fromIntents.State;
}
export interface State {
intents: IntentsState;
}
export const reducers: ActionReducerMap<IntentsState> = {
resources: fromIntents.reducer,
};
export function getInitialState(): IntentsState {
return {
resources: fromIntents.initialState,
};
}