我正在使用这样的lodash节流阀
const throttledFetch = _.throttle(fetch, 10000, { 'leading': false });
我需要在从 ws.get() 收到的某个通知事件上触发此操作。所以我们的想法是,如果我几乎同时收到 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 }));