【问题标题】:Lodash throttle firing multiple timesLodash油门多次点火
【发布时间】:2020-12-05 12:56:39
【问题描述】:

我正在使用这样的 lodash 油门

const throttledFetch = _.throttle(fetch, 10000, { 'leading': false });

我需要在我从 ws 获得的某个通知事件时触发它。所以我的想法是,如果我几乎同时收到 10 条通知,让 fetch 函数在等待 10 秒时只触发一次。

相反,获取函数在 10 秒延迟后被触发了 10 次。

我该如何解决这个问题?我可以使用任何其他方法。

欢迎提出建议

【问题讨论】:

  • fetch 函数长什么样子?
  • () => {dispatch(someAction())}

标签: javascript reactjs lodash throttling


【解决方案1】:

节流函数在重新渲染之间应该保持不变,这意味着我们必须使用 React 的 UseCallback 函数。如果您进行更改,这将起作用:

const throttledFetch = _.throttle(fetch, 10000, { 'leading': false });

const throttledFetch = useCallback(_.throttle(fetch, 10000, { 'leading': false }));

【讨论】:

    【解决方案2】:

    为调用保留一个计数器并检查它是否只调用一次。

    【讨论】:

    • 是的,我可以。我正在等着看是否有某种原因导致油门不起作用,否则我会接受你的回答。
    • 我会将其标记为已解决,因为我选择了这条路线。谢谢
    【解决方案3】:

    如果我们只调用一次fetch 函数,对于同时所有的 N 个请求,我们应该使用debounce 而不是throttle。这是响应来自 Web 套接字侦听器的用户交互/某些事件的最佳方式。

    响应速度要快,不要频繁调用。为了完全满足上述要求,我会选择_debounce

    正如上述答案中Tuxedo Joe 所回答的那样,我们可以使用useCallback 方法,因为在重新渲染之间参考将保持不变。

    const asyncFetch = useCallback(_.debounce(fetch, 10000, { 'leading': false }));

    【讨论】:

      猜你喜欢
      • 2022-08-11
      • 2019-05-22
      • 2021-07-15
      • 1970-01-01
      • 1970-01-01
      • 2021-01-01
      • 2020-11-11
      • 1970-01-01
      • 2017-09-10
      相关资源
      最近更新 更多