store.select 的 ngrx 效果
ngrx effects for store.select
是否可以让 ngrx/effect
监听 select
操作?如:
this.store.select('reducer')
有什么建议吗?
效果不应该听商店的。效果监听动作。原因是效果消除了由执行操作引起的副作用。 一个原因是它可以防止在时间旅行调试时像 API 这样的调用被发送垃圾邮件。如果从商店触发效果,它会在调试时触发。
效果触发动作,进而触发其他动作。 reducer 也会触发动作。 reducer 和 effect 可以触发相同的动作。
所以你应该做的是不要触发状态之外的动作。通过以您希望效果触发的方式改变状态的相同动作触发它。
效果可以由多种 Observable 驱动。
使用这样的状态是有效的:
updateEstimatedTimeToShip$ = createEffect(() =>
this.store.select(selectShippingAddress).pipe(
switchMap(shippingAddress => this.shippingService.getEstimatedTimeToShip(shippingAddress).pipe(
map(timeToShip => GetUpdatedEstimatedTimeToShipSuccessful({ timeToShip })
)
)
);
updateEstimatedTimeToShip$
在我们有某种形式让用户输入他们的地址的情况下会很有用,我们想调用一个服务来进行 HTTP 调用以获取更新的预计发货时间。
请注意,我们可以在对 FormValueChanged
操作做出反应的效果中使用更改检测逻辑...但是如果不止一个操作影响了送货地址怎么办?现在我们必须在许多效果中重复逻辑。
我们也可以为表单中的不同字段触发单独的操作,但是既然我们已经可以从商店中的数据进行变化检测,为什么还要这样做呢?
Having components be responsible for dispatching "change detection"-type actions seems superfluous to me when selectors seem purpose-built for change detection.
是否可以让 ngrx/effect
监听 select
操作?如:
this.store.select('reducer')
有什么建议吗?
效果不应该听商店的。效果监听动作。原因是效果消除了由执行操作引起的副作用。 一个原因是它可以防止在时间旅行调试时像 API 这样的调用被发送垃圾邮件。如果从商店触发效果,它会在调试时触发。
效果触发动作,进而触发其他动作。 reducer 也会触发动作。 reducer 和 effect 可以触发相同的动作。
所以你应该做的是不要触发状态之外的动作。通过以您希望效果触发的方式改变状态的相同动作触发它。
效果可以由多种 Observable 驱动。
使用这样的状态是有效的:
updateEstimatedTimeToShip$ = createEffect(() =>
this.store.select(selectShippingAddress).pipe(
switchMap(shippingAddress => this.shippingService.getEstimatedTimeToShip(shippingAddress).pipe(
map(timeToShip => GetUpdatedEstimatedTimeToShipSuccessful({ timeToShip })
)
)
);
updateEstimatedTimeToShip$
在我们有某种形式让用户输入他们的地址的情况下会很有用,我们想调用一个服务来进行 HTTP 调用以获取更新的预计发货时间。
请注意,我们可以在对 FormValueChanged
操作做出反应的效果中使用更改检测逻辑...但是如果不止一个操作影响了送货地址怎么办?现在我们必须在许多效果中重复逻辑。
我们也可以为表单中的不同字段触发单独的操作,但是既然我们已经可以从商店中的数据进行变化检测,为什么还要这样做呢?
Having components be responsible for dispatching "change detection"-type actions seems superfluous to me when selectors seem purpose-built for change detection.