我正在使用Angular 7构建Web应用程序,并希望使用@ ngrx / store和@ ngrx / effects。
免责声明:我是这些技术的新手。
在典型的客户端-服务器应用程序中,我认为允许数据库分配id值是有意义的,然后将其在HTTP响应中传递回客户端。
但是,考虑到使用NGRX时API调用应该会产生副作用,用http响应中返回的ID更新处于状态的新对象的正确方法是什么?
我的理解是副作用不应该操纵状态。这就是它们被称为副作用的全部原因。
解决此问题的正确方法是什么?
答案 0 :(得分:1)
一些可能性:
@Effect()
save = this.actions.pipe(
ofType(Foo),
exhaustMap(({ payload }) =>
this.service.post(payload).pipe(
map(
result =>
new FooSuccess({
...payload,
id: result,
})
),
catchError(() => of(new FooFailed()))
)
)
);
@Effect()
save = this.actions.pipe(
ofType(Foo),
exhaustMap(({ payload }) =>
this.service.post(payload).pipe(
map(
result =>
new FooSuccess({
reference: payload.reference,
id: result,
})
),
catchError(() => of(new FooFailed()))
)
)
);
// and in the reducer
return {
...state,
// mutate found entity, else just return the entity in the store
entities: this.state.entities.map(p => p.reference === action.reference ? mutateEntityHere : p)
}
我的偏好设置是第一个或第二个选项。