我是ngrx
的新手,我试图为我的每个功能模块都提供一个状态,并为应用程序模块提供一个状态。首先,我注册了StoreModule
,它在app.module.ts
中的作用是这样的:
@NgModule({
declarations: [
...
],imports: [
...,StoreModule.forRoot({app: fromApp.reducer}),EffectsModule.forRoot([AppEffectsService])
],bootstrap: [AppComponent]
})
export class AppModule { }
然后我创建了一个名为home的模块,该模块带有reducer and Effects服务,并像这样使用它们:
@NgModule({
declarations: [
...
],HomeRoutingModule,StoreModule.forFeature(fromHome.homeFeatureKey,fromHome.reducer),EffectsModule.forFeature([HomeEffectsService]),]
})
export class HomeModule { }
我在家用减速器中放入了console.log
,每次执行一个动作时,我都会看到两次记录!我现在不知道为什么我的减速器每次调度都要调用两次。甚至当我将存储添加到更多模块时,我也会看到重复的日志。
Reducer看起来像这样:
const homeReducer = createReducer(
initialHomeState,on(Homeactions.loadOrderTypesSuccess,(state,{ orderTypes }) => ({ ...state,orderTypes })),);
export function reducer(state: HomeState | undefined,action: action) {
console.log(action.type);
return homeReducer(state,action);
}
这是我的效果:
loadOrderTypes$ = createEffect(() => this.actions$.pipe(
ofType(Homeactions.loadOrderTypes),mergeMap(() => from(this.dataService.getOrderTypes())
.pipe(
map(orderTypes => Homeactions.loadOrderTypesSuccess({ orderTypes })),catchError(error => of(Homeactions.loadOrderTypesFailure({ error }))),)
)
));
动作的创建:
export const loadOrderTypes = createaction(
'[Home Page] Load order type start'
);
export const loadOrderTypesSuccess = createaction(
'[Home Page] Load order type success',props<{ orderTypes: OrderType[] }>()
);
export const loadOrderTypesFailure = createaction(
'[Home Page] Load order type failure',props<{ error: any }>()
);
分派操作后,日志为:
@ngrx/store/init
15:23:36.470 app.reducer.ts:22 @ngrx/effects/init
15:23:36.505 core.js:38781 Angular is running in the development mode. Call enableProdmode() to enable the production mode.
15:23:36.608 app.reducer.ts:22 @ngrx/store/update-reducers
15:23:36.609 home.reducer.ts:35 @ngrx/store/update-reducers
15:23:36.644 app.reducer.ts:22 [Home Page] Load order type start
15:23:36.644 home.reducer.ts:35 [Home Page] Load order type start
15:23:36.761 client:52 [WDS] Live Reloading enabled.
15:23:37.743 app.reducer.ts:22 [Home Page] Load order type success
15:23:37.744 home.reducer.ts:35 [Home Page] Load order type success
我希望我的减速器被调用一次。我在做什么错了?