我在弄清楚如何在Angular中构成分层存储时遇到问题。我想要多个在应用程序的特定部分上工作的reducer。
这里是描述:这是HR应用程序。我有一个人才模块(员工),其数据分为五个部分:专业知识,教育,backgroundCheck,位置和薪资,职位素养。
每个部分包含满足业务期望的相当复杂的逻辑。 我们正在为市场更新一些案例,我们需要在多个部分的组件之间共享数据。
所以从根模块开始,我已经为人才模块定义了根状态
我已经尝试使用如这些帖子中所述的CombineReducers: Angular 6 / NGRX Combine Reducers
所以从根模块开始,我已经为人才模块定义了根状态
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;
}
}
我希望有一种方法可以实现存储粒度和拆分reducer,以便它们更易于管理,但是我在调试器中看到的唯一一件事是调用了专业存储方法,但从不调用reducer并且不更新值。商店。
答案 0 :(得分:0)
我知道了。基本上,要使用这种存储,我们需要为每个功能组合一个化简(取决于粒度),然后将其公开为一个公共化简。 解决方法如下:
export interface TalentState {
expertise: fromExpertise.ExpertiseState
}
export const reducers: ActionReducerMap<TalentState> = {
expertise: fromExpertise.expertiseReducer
}
export const getTalentState = createFeatureSelector<TalentState>('talent')