Ошибка построения angular + ngrx 8 для производства при использовании функции createReducer - PullRequest
2 голосов
/ 11 июля 2019

В настоящее время я пытаюсь создать приложение Angular + NgRX 8 с новыми функциями NgRX creator . Но когда я создаю это для производства, появляется следующая ошибка:

Вызовы функций не поддерживаются в декораторах, но «createReducer» вызывался в «редукторах».

В режиме разработки вообще нет проблем.

Запрос Редуктор выглядит как

export interface State extends EntityState<Request> {
  loading: boolean;
  error: any;
}
export const initialState = adapter.getInitialState({
  loading: false,
  error: null
});

export const reducer = createReducer(
  initialState,
  on(RequestsActions.loadRequestsSuccess, (state, { requests }) => adapter.addAll(requests, {...state, loading: false})),
  on(RequestsActions.loadRequestsFailed, (state, { error }) => ({...state, error, loading: false})),
  on(RequestsActions.deleteRequestSuccess, (state, { id }) => adapter.removeOne(id, state))
);

и состоит из файла index.ts с другими редукторами

export const reducers = {
  requests: reducer
  // [...]
}

и StoreModule импортируется с картой редукторов, подобной этой

@NgModule({
  imports: [
    CommonModule,
    StoreModule.forFeature('requests', reducers),
    EffectsModule.forFeature(effects),
    // [...]
  ]
})
export class RequestsModule {}

У вас есть идеи, что происходит? Спасибо и ура!

1 Ответ

3 голосов
/ 11 июля 2019

Вам нужно обернуть ваш редуктор как вызов функции следующим образом:

const yourReducer = createReducer(
  initialState,
  on(RequestsActions.loadRequestsSuccess, (state, { requests }) => adapter.addAll(requests, {...state, loading: false})),
  on(RequestsActions.loadRequestsFailed, (state, { error }) => ({...state, error, loading: false})),
  on(RequestsActions.deleteRequestSuccess, (state, { id }) => adapter.removeOne(id, state))
);

export function reducer(state: State | undefined, action: Action) {
  return yourReducer(state, action);
}

См. Официальный документ -

https://ngrx.io/guide/store/reducers#creating-the-reducer-function

...