Удержание 3 одинаковых объектов в магазине с чистым разделением.
У меня есть три службы, которые возвращают объекты одного типа на основе различных действий. Как я могу держать все объекты в магазине функций с чистым разделением.
Действие 1: LOAD_CANDIDATES
I have an effect that invokes below service call
public getCandidates(): Observable {
const url = 'Candidates Url';
return this.http.get(url);
}
Мотор2:LOAD_MATCHED_CANDIDATES
I have an effect that invokes below service call
public getMatchingCandidates(conditions: any): Observable
{
const url = 'Matched Candidates Url';
return this.http.get(url);
}
Действие 3: LOAD_ASSIGNED_CANDIDATES
I have an effect that invokes below service call
public getAssignedCandidates(id: number): Observable {
const url = 'Assigned candidates url';
return this.http.get(url);
}
У меня есть эффекты успеха и неудачи для каждого из них.
Candidate reducer :
export const reducers = {
search: fromSearch.reducer,
candidates: fromCandidates.reducer,
collection: fromCollection.reducer
};
Here is the injection of feature store to module
StoreModule.forFeature('candidates', combineReducers(fromStore.reducers))
Как я могу иметь всех, совпавших и назначенных кандидатов одновременно в хранилище объектов с чистым разделением, которое указывает соответствующий тип объекта (то есть они сопоставляются, они назначаются)
1 ответ
Для этого вам нужно нарезать соответствующее состояние с несколькими свойствами и обработать его в редукторе. см. ниже код для примера реализации
объявить "кандидатов" типа "CandidateState"
export interface CandidateState {
allcandidates: Array<Object>;
matchedcandidates: Array<Object>;
assignedcandidates: Array<Object>;
}
Теперь составьте ваш кандидат редуктор, как показано ниже
export const candidateInitialState: fromState.CandidateState = {
allcandidates: [],
matchedcandidates: [],
assignedcandidates: []
};
export const reducer = (
state: fromState.CandidateState = candidateInitialState,
action: fromAction.CandidateActions
): fromUserState.CandidateState => {
switch (action.type) {
case fromAction.LOAD_CANDIDATES: {
return {
...state,
allcandidates: action.allCandidatesData
};
}
case fromAction.LOAD_MATCHED_CANDIDATES: {
return {
...state,
matchedcandidates: action.matchedCandidatesData
};
}
case fromAction.LOAD_ASSIGNED_CANDIDATES: {
return {
...state,
assignedcandidates: action.assignedCandidatesData
};
}
default:
return state;
}
};