使用 NGRX 在 API 调用中更新后将项目添加到状态
Add item to state after updating in API call using NGRX
我正在使用 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)
})
更新 post 时,API 接受的模型不同于获取时的模型:
export interface PostUpdateModel {
id: number;
content: string;
title: string;
tagsIds: number[];
}
我的想法是让一个 Effect 接受一个 PostUpdateModel 并将其发送到 API which returns a Post 然后调用 updateOne。
这有意义吗?我该怎么做?
是的,这是有道理的。
另一种看待它的方法是将整个 Post
对象发送到效果并让效果将其映射到请求对象。
此外,目前为每个 post 存储了一组标签。在更复杂的情况下,这可能更难维护,因为此数据是重复的,normaling state 可以提供解决此问题的解决方案(如果您有的话)。
我正在使用 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)
})
更新 post 时,API 接受的模型不同于获取时的模型:
export interface PostUpdateModel {
id: number;
content: string;
title: string;
tagsIds: number[];
}
我的想法是让一个 Effect 接受一个 PostUpdateModel 并将其发送到 API which returns a Post 然后调用 updateOne。
这有意义吗?我该怎么做?
是的,这是有道理的。
另一种看待它的方法是将整个 Post
对象发送到效果并让效果将其映射到请求对象。
此外,目前为每个 post 存储了一组标签。在更复杂的情况下,这可能更难维护,因为此数据是重复的,normaling state 可以提供解决此问题的解决方案(如果您有的话)。