Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/398.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 存储的ngrx效果。选择_Javascript_Angular_Ngrx Effects - Fatal编程技术网

Javascript 存储的ngrx效果。选择

Javascript 存储的ngrx效果。选择,javascript,angular,ngrx-effects,Javascript,Angular,Ngrx Effects,是否可以通过ngrx/effect收听select操作?例如: this.store.select('reducer') 有什么建议吗?特效不应该听商店的。效果倾听行动。原因是效果消除了做某个动作所引起的副作用。一个原因是,它可以防止在进行时间旅行调试时对API调用之类的内容进行垃圾邮件处理。如果从存储触发了效果,它将在调试时激发 效果触发一系列动作,并反过来触发其他动作。减速器也会触发一系列动作。减速器和效果可以触发相同的动作 所以你应该做的不是触发一个状态外的动作。使用相同的操作触发它,该

是否可以通过
ngrx/effect
收听
select
操作?例如:

this.store.select('reducer')

有什么建议吗?

特效不应该听商店的。效果倾听行动。原因是效果消除了做某个动作所引起的副作用。一个原因是,它可以防止在进行时间旅行调试时对API调用之类的内容进行垃圾邮件处理。如果从存储触发了效果,它将在调试时激发

效果触发一系列动作,并反过来触发其他动作。减速器也会触发一系列动作。减速器和效果可以触发相同的动作


所以你应该做的不是触发一个状态外的动作。使用相同的操作触发它,该操作会以您希望效果触发的方式更改状态。

效果不应侦听存储。效果倾听行动。原因是效果消除了做某个动作所引起的副作用。一个原因是,它可以防止在进行时间旅行调试时对API调用之类的内容进行垃圾邮件处理。如果从存储触发了效果,它将在调试时激发

效果触发一系列动作,并反过来触发其他动作。减速器也会触发一系列动作。减速器和效果可以触发相同的动作


所以你应该做的不是触发一个状态外的动作。用同样的动作触发它,以你想要的效果触发的方式改变状态。

接受的答案是完全错误的。效应可以而且应该由多种可观察物驱动

这样的效果是完全有效的:

updateEstimatedTimeToShip$=createEffect(()=>
this.store.select(selectShippingAddress).pipe(
switchMap(shippingAddress=>this.shippingService.getEstimatedTimeToShip(shippingAddress).pipe(
映射(timeToShip=>GetUpdatedEstimatedTimeToShipSuccessful({timeToShip})
)
)
);
当用户以某种形式输入他们的地址,并且我们希望调用一个服务来进行HTTP调用以获得更新的预计发货时间时,这种效果将非常有用

请注意,我们可以使更改检测逻辑对
FormValueChanged
操作作出反应……但是如果有多个操作影响发货地址,该怎么办?现在我们必须在多个效果中重复该逻辑

我们也可以为表单中的不同字段触发单独的操作,但是既然我们已经可以从存储中的数据进行更改检测,为什么还要这样做呢

让组件负责分派“更改检测”类型的操作对我来说是愚蠢的,因为可以从数据中去除效果


此外,就时间旅行调试而言……是的,可以进行API调用!然后我应该围绕时间旅行设计一个应用程序,还是在时间旅行时使用浏览器的开发工具禁用网络…

接受的答案完全是错误的。效果可以而且应该由多种观察结果驱动

这样的效果是完全有效的:

updateEstimatedTimeToShip$=createEffect(()=>
this.store.select(selectShippingAddress).pipe(
switchMap(shippingAddress=>this.shippingService.getEstimatedTimeToShip(shippingAddress).pipe(
映射(timeToShip=>GetUpdatedEstimatedTimeToShipSuccessful({timeToShip})
)
)
);
当用户以某种形式输入他们的地址,并且我们希望调用一个服务来进行HTTP调用以获得更新的预计发货时间时,这种效果将非常有用

请注意,我们可以使更改检测逻辑对
FormValueChanged
操作作出反应……但是如果有多个操作影响发货地址,该怎么办?现在我们必须在多个效果中重复该逻辑

我们也可以为表单中的不同字段触发单独的操作,但是既然我们已经可以从存储中的数据进行更改检测,为什么还要这样做呢

让组件负责分派“更改检测”类型的操作对我来说是愚蠢的,因为可以从数据中去除效果


此外,对于时间旅行调试…是的,可以进行API调用!然后我应该围绕时间旅行设计一个应用程序,还是在时间旅行时使用浏览器的开发工具禁用网络…

谢谢,我不确定对象的初始加载是否是最好的方式,因为组件必须调度操作,只有o有效果截获它并从源加载数据,然后发送另一个事件将其放入存储,然后调用store.select from组件。我试图简化它,但被否决了…谢谢,我不确定对象的初始加载是最佳方式,因为组件必须发送一个动作,只有o有效果截获它并从源加载数据,然后发送另一个事件将其放入存储,然后调用store.select from组件。我试图简化它,但被否决了……这只会触发once@Marcel
this.store.select(选择发货地址)
将继续输出值并触发效果,假设选择器值发生更改。您是否认为情况并非如此?这只会触发once@Marcel
this.store.select(选择发货地址)
将继续输出值并触发效果,假设选择器值发生更改。您是否认为情况并非如此?