美文网首页
解决ReactHooks中使用loadsh的防抖不生效

解决ReactHooks中使用loadsh的防抖不生效

作者: 春木橙云 | 来源:发表于2023-01-06 11:58 被阅读0次
    • 需求
      当滚动鼠标时候请求接口,需要防抖处理,避免大量请求。

    • 问题
      ReactHooks中使用loadsh的防抖不生效,没有调用debounce函数。

    • 代码如下

      // 缩放时间轴事件
      const onTimeScaleScaling = (totalTime: number) => {
        _.loadsh(()=>{console.log("执行防抖,0.3秒后在请求接口"),300})
      };
    
    • 问题根因
      鼠标滚动事件使用的是ahooks的useEventListener,每次监听执行都会创建一个新的 debounce,这样防抖就不生效了。

    • 解决办法

      • 方法1——使用ref来操作,因为ref不会被注销
     // 缩放时间轴事件
      const onTimeScaleScaling = (totalTime: number) => {
        debounceScaling(totalTime);
      };
    
      const debounceScaling = useRef(
        _.debounce(
          console.log("执行防抖,0.3秒后在请求接口"),
          300,
        ),
      ).current;
    
    • 方法2—— useCallback
     // 缩放时间轴事件
      const onTimeScaleScaling = (totalTime: number) => {
        debounceScaling(totalTime);
      };
    
      const debounceScaling = useCallback(
        _.debounce(
          console.log("执行防抖,0.3秒后在请求接口"),
          300,
        ),[]
      );
    

    THE END!

    相关文章

      网友评论

          本文标题:解决ReactHooks中使用loadsh的防抖不生效

          本文链接:https://www.haomeiwen.com/subject/heescdtx.html