使用NGRX在API调用中更新后,将项目添加到状态

时间:2020-06-15 21:30:01

标签: angular ngrx angular9

我正在Angular 9中使用NGRX / Entity,并且具有以下实体:

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

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

Reducer类似于:

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[];
}  

我的想法是让一个Effect接受一个PostUpdateModel并将其发送到API,该API返回一个Post,然后调用updateOne。

这有意义吗?我该怎么办?

1 个答案:

答案 0 :(得分:1)

是的,这很有道理。 另一种查看方法是将整个Post对象发送给效果,然后让效果将其映射到请求对象。

此外,目前为每个帖子存储标签集合。在更复杂的情况下,这很难维护,因为此数据是重复的,normaling state可以提供解决此问题的解决方案(如果有)。