У меня есть следующий редуктор:
case ProductionCommentActionTypes.EditCommentSuccess: {
return adapter.updateOne(action.payload, state);
}
где полезной нагрузкой является следующий объект:
{
id: number,
changes: {
id: number;
avatar: string;
createdAt: Date;
createdBy: string;
body: string;
discipline: string;
isConcern: boolean;
isResolved: boolean;
plan_Id: number;
resolution: {
id: number;
comment_Id: number;
avatar: string;
createdAt: Date;
createdBy: string;
body: string;
}
}
}
К сожалению, когда я иду обновлять объект, я ясно вижу, что в action.payload есть именно те данные, которые я ожидаю. Я проверил как action.payload, так и эффект:
@Effect()
resolveProductionConcernSuccess$: Observable<Action> = this.actions$
.ofType<ResolveConcernSuccess>(ProductionCommentActionTypes.ResolveConcernSuccess).pipe(
// Performing a get rather than an edit as the comment should have already
// been updated in the service when the resolution was added.
switchMap(action => this.commentService.getComment(action.payload.comment_Id)),
map((comment: any) => {
comment.updatedBy = "test";
return new EditCommentSuccess(comment);
}),
catchError(err => of(new EditCommentFail(err)))
);
Однако, что я вижу из этого:
this.comments$ = rootStore.select<Comment[]>(fromRoot.getCommentsForSelectedPlan);
this.comments$.subscribe(res => console.info(res));
Это старые данные, даже если срабатывает изменение. Я бы по крайней мере ожидал увидеть updatedBy = "test". Я также вижу старые данные в состоянии незамедлительно после updateOne, если я прохожу через отладчик.
Другой способ сказать, что это
return adapter.updateOne(action.payload, state);
Кажется, на самом деле ничего не меняется, несмотря на правильные значения в полезной нагрузке.
Почему свойства состояния на самом деле не обновляются? Есть ли правильный способ сделать это?
Под старыми данными я подразумеваю сразу старые данные, например, прямо перед обновлением.





Проблема была в редукторе.
return adapter.updateOne({ id: action.payload.id, changes: action.payload }, state);
если в вашем браузере включено кеширование, вы можете увидеть старые данные