Я пытаюсь отработать следующий сценарий Эффект / Состояние, и я не совсем обдумал это.
Хорошо, так что я должен либо загрузить данные, основанные на стандартеID (по существу, столбец идентификаторов в таблице плана), ИЛИ по известному идентификатору компании.
У меня есть следующие
ДЕЙСТВИЯ
export class Load implements Action {
readonly type = PlanActionTypes.Load;
constructor(public payload: number) {}
}
export class LoadByPropNum implements Action {
readonly type = PlanActionTypes.LoadByPropNum;
constructor(public payload: string) { }
}
export class LoadSuccess implements Action {
readonly type = PlanActionTypes.LoadSuccess;
constructor(public payload: Plan) {
}
}
ЭФФЕКТ:
Этот эффект работает какпредназначен:
@Effect()
loadPlan$: Observable<Action> = this.actions$
.ofType<Load>(PlanActionTypes.Load).pipe(
switchMap(action => this.planService.getPlan(action.payload)),
map((plan: Plan) => {
return new LoadSuccess(plan);
}),
catchError(err => {
toastr.error(`Could not load plan.`);
console.error(err);
return of(new LoadFail(err));
})
);
Этот не делает.
@Effect()
loadPlanByProperty$: Observable<Action> = this.actions$
.ofType<LoadByPropNum>(PlanActionTypes.LoadByPropNum)
.pipe(
switchMap(action => this.planService.getPlanByProperty(action.payload)),
map((plan: Plan) => {return new LoadSuccess(plan);} ),
catchError(err => {
toastr.error(`Could not load plan.`);
console.error(err);
return of(new LoadFail(err));
})
);
Я понимаю, что мне не хватает в редуктор / состояние.Итак, давайте посмотрим на это.
СНИЖЕНИЯ:
case PlanActionTypes.LoadSuccess: {
return adapter.addOne(action.payload, {
...state,
selectedPlanId: state.selectedPlanId,
});
}
case PlanActionTypes.Load: {
return {
...state,
selectedPlanId: action.payload,
};
}
СОСТОЯНИЕ:
export interface State extends EntityState<Plan> {
selectedPlanId: number | null;
}
Когда я использую действие Load, я устанавливаю selectedStateId в редуктор.Таким образом, имеет смысл, почему selectedStateid имеет значение null для LoadSuccess, когда я использую действие LoadBypropNum, но имеет значение при использовании действия Load.Однако, когда я вызываю LoadByPropnum - , у меня еще нет идентификатора! .
ЦЕЛЬ : Я хотел бы обновить архитектуру так, чтобы у меня был промежуточный шаг для LoadPlanByProperty $, посредством которого я обновляю State SelectedPlanId, как только я получу данные.В настоящее время LoadPlan $ Effect и LoadPlanByProperty $ Effect извлекают одну и ту же запись, используя разные столбцы, и оба успешно.Я не хочу получать данные, использовать идентификатор, чтобы снова получить те же данные.
ВОПРОСЫ TL / DR
Как связать несколько действий вместе за пределами первой карты переключения?
Как обновить состояние одного из этих дополнительных действий?