Как зарегистрировать один редуктор, используя StoreModule.forFeature с бета-версией ngrx 8.0.0 - PullRequest
2 голосов
/ 04 июня 2019

в моем функциональном модуле, я использую метод createReducer для создания моего редуктора следующим образом:

export const reducer = createReducer(
new InitState(),
on(loadData, state => {
return {
...state,
isLoading: true
};
})
);

но когда я регистрирую вышеупомянутый редуктор в классе модуля следующим образом:

StoreModule.forFeature('my-module', reducer),

я получаю следующую ошибку при компиляции проекта:

ОШИБКА myModule.module.ts (38,47): Ошибка при компиляции шаблона «MyModuleModule» Вызовы функций не поддерживаются в декораторах, но 'createReducer' был вызван в 'reducer' 'reducer' вызывает 'createReducer' в myreducer.reducer.ts (14,24).

Кто-нибудь знает, что может пойти не так? или как мне зарегистрировать один редуктор, потому что все примеры, которые я видел, используют зерноуборочные комбайны с несколькими редукторами, и я задаюсь вопросом, как нам сделать это только для одного редуктора?

Большое спасибо!

Ответы [ 2 ]

1 голос
/ 16 июня 2019

Вам необходимо обернуть редуктор, чтобы он был совместим с компиляцией AOT:

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

Затем обратитесь к этой экспортированной именованной функции в состоянии.

0 голосов
/ 05 июня 2019

Я считаю, что вы должны использовать функцию вместо const здесь. У меня такая же ошибка, как эта. Так что вам нужно изменить свой код на что-то вроде этого

export function bookmarkReducer(state = initialState, action: bookMark.Actions) {
    switch (action.type) {
        case bookMark.GET_BOOK_MARK:
            return {
                ...state,
                id: action.payload
            };
        case bookMark.GET_BOOK_MARK_SUCCESS:
            return {
                ...state,
                courseByBookmarkId: action.payload
            };
        case bookMark.GET_BOOK_MARK_BY_USERID_SUCCESS:
            return {
                ...state,
                bookmark: action.payload
            };
        case bookMark.BOOK_MARK_COURSE:
        case bookMark.UNDO_BOOK_MARK_COURSE:
            return {
                ...state,
                userId: action.payload.userId,
                courseId: action.payload.courseId
            };
        default:
            return state;
    }
}
...