我有两个字段的商店:
items: Item[]
money: number
当用户购买商品我调用apiService时,如果服务器的响应允许您添加商品(服务器将检查用户是否有足够的钱)我可以在商店中进行两次更改] >:
我对调度动作的良好做法感到困惑...哪种方法是最好的?
AddItem
操作和DecreaseMoney
操作:store.dispatch([new AddItem(), new DecreaseMoney()]);
AddItem
操作并调度DecreaseMoney
操作:this.actions$.pipe(ofActionSuccessful(AddItem)).subscribe(() => {store.dispatch(new DecreaseMoney()});
DecreaseMoney
动作内部调度AddItem
动作:@Action(AddItemAction)
AddItem({ getState, setState }: StateContext<any>) {
const state = getState();
return this.http.post(`${apiUrl}/buy`, {}).pipe(
tap(newItem => {
setState({...state, items: [...state.items, newItem]});
dispatch(new DecreaseMoney()); // <---
})
);
}
我有两个字段的商店:item:Item [] money:number用户购买商品时,我呼叫apiService,并且如果服务器的响应允许您添加商品(服务器将检查...) >
如果操作没有改变相同的状态,我建议您使用多重调度,因为它不太冗长。如果您依靠第一个异步操作返回的响应,则我认为嵌套设置是合乎逻辑的。但是,看起来好像您没有向DecreaseMoney()传递任何内容,所以第一种选择似乎最好。
编辑: