在Ngrx中设置reducer

时间:2020-10-13 13:38:17

标签: angular ngrx

我正在设置非常基本的Ngrx状态管理。

# app.module
StoreModule.forRoot(reducers),

此代码是使用Ngrx原理图生成器生成的。

export const reducers: ActionReducerMap<State> = {
  [fromFilter.filterFeatureKey]: fromFilter.reducer
};

哪个给我错误

Expression form not supported in 'reducers'

我已经尝试过在Ngrx github页面上找到的内容。这不会产生任何错误,但只会无声地起作用,不会生成任何状态。

export function reducers(state: State | undefined, action: Action) {
  return combineReducers(_reducers)(state, action);
}

我可以通过对过滤器键进行硬编码来使其工作,但是根据文档,这不是推荐的做法。

export const reducers: ActionReducerMap<State> = {
  filter: fromFilter.reducer
};

1 个答案:

答案 0 :(得分:1)

这是目前原理图自动生成的代码的问题。要保留非硬编码的字典版本,请在app.module.ts中使用注入令牌,例如(从声明中导入reducersState

export const REDUCER_TOKEN = new InjectionToken<ActionReducerMap<State>>('root reducer');
@NgModule({
    declarations: [AppComponent],
    imports: [
        ...
        StoreModule.forRoot(REDUCER_TOKEN),
    ],
    providers: [
        { provide: REDUCER_TOKEN, useValue: reducers }
    ],
    bootstrap: [AppComponent]
})
export class AppModule { }

仅在使用提前编译时才会发生此问题,但是由于这是大多数生产版本的默认设置,因此必须使用令牌才能使其正常工作。