首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >多调度或嵌套调度

多调度或嵌套调度
EN

Stack Overflow用户
提问于 2020-03-10 18:29:07
回答 1查看 62关注 0票数 0

我有一家商店,有两个领域:

  • items: Item[]
  • money: number

当用户购买商品时,我调用apiService,如果来自服务器的响应允许您添加一个项目(服务器将检查用户是否有足够的资金),我可以在商店中进行两个更改

array

  • decrease money

推出新项目

我对什么是派遣行动的好练习感到困惑.哪条路最好?

  1. Multi-dispatching -分派AddItem操作和DecreaseMoney操作:

代码语言:javascript
复制
store.dispatch([new AddItem(), new DecreaseMoney()]);

  1. 订阅AddItem操作并在第一次成功时分派DecreaseMoney操作:

代码语言:javascript
复制
this.actions$.pipe(ofActionSuccessful(AddItem)).subscribe(() => {store.dispatch(new DecreaseMoney()});

  1. 调度AddItem操作中的DecreaseMoney操作:

代码语言:javascript
复制
@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()); // <---
      })
    );
  }
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-03-10 18:57:44

如果操作不改变相同的状态,我建议使用多分派,因为它不那么冗长。如果您依赖于从第一个异步操作返回的响应,我认为嵌套设置是合乎逻辑的。但是,您似乎并没有将任何东西传递给DecreaseMoney()...so,第一个选项似乎是最好的。

编辑:

我将采用备选方案2,因为这可能是一种特定的情况。如果将所有的逻辑都放在操作中,则需要将DecreaseMoney()耦合到AddItem()。通过将业务逻辑放入组件/容器中,可以创建可重用的操作。这就是我个人会做的。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60623823

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档