我有一家商店,有两个领域:
items: Item[]money: number当用户购买商品时,我调用apiService,如果来自服务器的响应允许您添加一个项目(服务器将检查用户是否有足够的资金),我可以在商店中进行两个更改
array
推出新项目
我对什么是派遣行动的好练习感到困惑.哪条路最好?
AddItem操作和DecreaseMoney操作:store.dispatch([new AddItem(), new DecreaseMoney()]);AddItem操作并在第一次成功时分派DecreaseMoney操作:this.actions$.pipe(ofActionSuccessful(AddItem)).subscribe(() => {store.dispatch(new DecreaseMoney()});AddItem操作中的DecreaseMoney操作:@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()); // <---
})
);
}发布于 2020-03-10 18:57:44
如果操作不改变相同的状态,我建议使用多分派,因为它不那么冗长。如果您依赖于从第一个异步操作返回的响应,我认为嵌套设置是合乎逻辑的。但是,您似乎并没有将任何东西传递给DecreaseMoney()...so,第一个选项似乎是最好的。
编辑:
我将采用备选方案2,因为这可能是一种特定的情况。如果将所有的逻辑都放在操作中,则需要将DecreaseMoney()耦合到AddItem()。通过将业务逻辑放入组件/容器中,可以创建可重用的操作。这就是我个人会做的。
https://stackoverflow.com/questions/60623823
复制相似问题