Иерархическая организация магазина - PullRequest
2 голосов
/ 06 октября 2019

У меня проблема с выяснением того, как создать иерархическое хранилище в Angular. Я хотел бы иметь несколько редукторов, которые работают на определенной части приложения.

Вот описание: это приложение по подбору персонала. У меня есть модуль таланта (сотрудника), данные которого разбиты на пять разделов: опыт, образование, справочная проверка, местоположение и зарплата, предпочтения по работе.

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

Итак, начните с корневого модуля. Я определил корневое состояние для модуля талантов.

Я попытался использовать зернокомбайны типаину, как описано в этом посте: Угловые 6 / NGRX комбайновые редукторы

Итак, начнем с корневого модуля. Я определил корневое состояние для модуля талантов.

export interface ITalentState {
    profile: IProfileState;
}

Вот редуктор для состояния талантов.

export function talentReducer(state = talentInitialState, action: TalentActions): ITalentState {
    switch(action.type) {
        case TalentActionTypes.SetProfile:
            return {
                ...state,
                profile: action.profileData 
            }
        default: return state;
    }
}

ProfileState определяется какэто

export interface IProfileState {
    expertiseState: IExpertiseState;
}

Вот раздел экспертизы:

export interface IExpertiseState {
    expertiseQuestions: ExpertiseQuestions;
    error: string;
}

Раздел экспертизы

function expertiseReducer(state, action)
    switch(action.type) {
        case ExpertiseActionsTypes.LoadFailed:
            return {
                ...state,
                expertiseQuestions: new ExpertiseQuestions(),
                error: action.message
            }
        case ExpertiseActionsTypes.LoadSuccess:
            return {
                ...state,
                expertiseQuestions: action.questions,
                error: ''
            }
        default: return state;
    }
}

Я ожидаю, что есть способ добиться гранулирования магазина и разделить редукторы так,они более управляемы, но в отладчике я вижу только то, что методы хранилища знаний вызываются, но никогда не вызывается редуктор, а значения в хранилище не обновляются.

1 Ответ

0 голосов
/ 09 октября 2019

Я понял это. По сути, чтобы использовать хранилище такого типа, нам нужно составить один редуктор для каждой функции (зависит от грануляции), а затем представить его как один публичный редуктор. Вот решение:

export interface TalentState {
expertise: fromExpertise.ExpertiseState
}

export const reducers: ActionReducerMap<TalentState>  = {
expertise: fromExpertise.expertiseReducer
}

export const getTalentState = createFeatureSelector<TalentState>('talent')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...