gpt4 book ai didi

angular - NGXS - 良好实践 : Passing service required params in action or getting it from state?

转载 作者:行者123 更新时间:2023-12-05 03:56:37 29 4
gpt4 key购买 nike

当处理一个分派(dispatch)的 Action 时,状态需要一些参数传递给服务,比如资源的ID,以便执行 Action 。我应该如何获取这些参数?

1。来自国家:

  @Action(AddCartItem)
addCartItem({ getState, patchState }: StateContext<CartStateModel>, { item }: AddCartItem) {
const cartId = getState().cartId;
return this.service.addCartItem(cartId, item).pipe(
tap(item => patchState({ /* [...] */ })),
);
}

优点:

  • 在调度组件中不需要为这些参数选择器
  • 耦合度较低(即,如果这些参数之一发生变化,则无需更改组件)

缺点:

  • 操作的可见性较低(即缺少信息)

2。来自行动:

  @Action(AddCartItem)
addCartItem({ getState, patchState }: StateContext<CartStateModel>, { cartId, item }: AddCartItem {
return this.service.addCartItem(cartId, item).pipe(
tap(item => patchState({ /* [...] */ })),
);
}

优点:

  • 更好地了解行动

缺点:

  • 在调度组件中需要一个选择器
  • 更多耦合

在我看来,选项 2 看起来更好,但我是否遗漏了什么?选项 2 会导致不必要的副作用吗?

最佳答案

不要将您的操作与当前状态耦合,因为您可能无法使用 Redux 调试器重放操作、跳过操作或回滚操作。

如果您的操作是从先前状态开始的状态变化的增量运动,并且不直接依赖于先前状态,那就更好了。

这也使测试变得更加困难,因为现在单元测试需要更多地了解预先存在的状态来测试操作。如果 Action 在有效负载中包含更多信息,则测试条件更容易设置。

关于angular - NGXS - 良好实践 : Passing service required params in action or getting it from state?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59198924/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com