可以限制/消除ngrx store.dispatch,还是可以限制/消除ngrx动作?

时间:2018-07-20 10:21:50

标签: angular ngrx

我正在使用角度为6的ngrx 6

在我的ngrx商店devtools中,我发现我的动作之一比我想要的更频繁地触发。它并没有破坏应用程序,只是使devtools输出混乱。

我通过以下方式派遣行动

this.store.dispatch(new RecentSearchesRequestedAction())

我怎样才能最好地对它进行反跳/抑制,以使其每秒发送不超过一次? ngrx是否有内置解决方案?我知道我可以花时间弄清楚为什么如此频繁地开火,但我确实没有时间这样做。实现此目的的最佳实践是什么?谢谢

2 个答案:

答案 0 :(得分:5)

最好的解决方案是对在ngrx之外的this.store.dispatch进行反跳。

您可以限制ngrx的 output 端,例如:

this.store.select((x) => x.property)
.pipe(
    debounceTime(1000)
).subscribe((v) => console.log(v));

...每秒最多记录一次x.property的值。但是要停止输入,您需要在调用进行调度之前先进行调节。

答案 1 :(得分:1)

这是对已接受反馈的补充回答,并深入探讨了实际放置去抖动的位置的更多细节。

使用commit-4时,由于valueChanges(example)的去抖动很简单:

app

这依赖于commit-3功能,该功能可取消现有呼叫并保留最新呼叫。

使用自定义控件时,取消操作通常需要自定义代码(example for a Kendo control,它不会发出更改,而是依赖事件):

应用去抖动的值更改指令之后

commit-3

用法

commit-4