首页 > 解决方案 > 使用 NGRX 在 API 调用中更新后将项目添加到状态

问题描述

我将 NGRX/Entity 与 Angular 9 一起使用,并且我拥有以下实体:

export interface Post {
  id: number;
  content: string;
  title: string;
  tags: Tag[];
} 

export interface Tag {
  id: number;
  name: string;
}

减速器是这样的:

export interface State extends EntityState<Post> { }

export const adapter: EntityAdapter<Post> = createEntityAdapter<Post>();

export const initialState: State = adapter.getInitialState();

const postReducer = createReducer(
  initialState,
  on(PostActions.updatePost, (state, { post }) => {
    return adapter.updateOne(post, state)
  })

更新帖子时,API 接受与获取时不同的模型:

export interface PostUpdateModel {
  id: number;
  content: string;
  title: string;
  tagsIds: number[];
}  

我的想法是有一个接受 PostUpdateModel 并将其发送到返回 Post 然后调用 updateOne 的 API 的效果。

这有意义吗?我怎样才能做到这一点?

标签: angularngrxangular9

解决方案


是的,这是有道理的。另一种看待它的方法是将整个Post对象发送到效果并让效果将其映射到请求对象。

此外,目前为每个帖子存储了一组标签。这在更复杂的场景中可能更难维护,因为这些数据是重复的,正常状态可以提供解决这个问题的解决方案(如果你有的话)。


推荐阅读