Lodash 油门多次点火
Lodash throttle firing multiple times
我是这样使用 lodash 油门的
const throttledFetch = _.throttle(fetch, 10000, { 'leading': false });
我需要在我从 ws 获得的某个通知事件时触发它。所以我的想法是,如果我几乎同时收到 10 个通知,让 fetch
函数在等待 10 秒时只触发一次。
相反,实际情况是在 10 秒延迟后提取函数被触发 10 次。
我该如何解决这个问题?我可以使用任何其他方法。
欢迎提出任何建议
为调用保留一个计数器并检查它是否仅调用一次。
受限函数在重新渲染之间应保持不变,这意味着我们必须使用 React 的 UseCallback 函数。如果你改变了,这会起作用:
const throttledFetch = _.throttle(fetch, 10000, { 'leading': false });
至
const throttledFetch = useCallback(_.throttle(fetch, 10000, { 'leading': false }));
如果我们只调用一次 fetch
函数,同时对所有 N 个请求,我们应该使用 debounce
而不是 throttle
。这是从 Web 套接字侦听器响应用户交互/某些事件的最佳方式。
响应要快一些,也不要频繁调用。为了完全满足上述要求,我将使用 _debounce
.
正如 Tuxedo Joe
在上面的回答中所回答的那样,我们可以采用 useCallback
方法,因为在重新渲染之间引用将保持不变。
const asyncFetch = useCallback(_.debounce(fetch, 10000, { 'leading': false }));
我是这样使用 lodash 油门的
const throttledFetch = _.throttle(fetch, 10000, { 'leading': false });
我需要在我从 ws 获得的某个通知事件时触发它。所以我的想法是,如果我几乎同时收到 10 个通知,让 fetch
函数在等待 10 秒时只触发一次。
相反,实际情况是在 10 秒延迟后提取函数被触发 10 次。
我该如何解决这个问题?我可以使用任何其他方法。
欢迎提出任何建议
为调用保留一个计数器并检查它是否仅调用一次。
受限函数在重新渲染之间应保持不变,这意味着我们必须使用 React 的 UseCallback 函数。如果你改变了,这会起作用:
const throttledFetch = _.throttle(fetch, 10000, { 'leading': false });
至
const throttledFetch = useCallback(_.throttle(fetch, 10000, { 'leading': false }));
如果我们只调用一次 fetch
函数,同时对所有 N 个请求,我们应该使用 debounce
而不是 throttle
。这是从 Web 套接字侦听器响应用户交互/某些事件的最佳方式。
响应要快一些,也不要频繁调用。为了完全满足上述要求,我将使用 _debounce
.
正如 Tuxedo Joe
在上面的回答中所回答的那样,我们可以采用 useCallback
方法,因为在重新渲染之间引用将保持不变。
const asyncFetch = useCallback(_.debounce(fetch, 10000, { 'leading': false }));