You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Vue3 setup函数中使用lodash的_.throttle节流功能失效如何解决?

问题原因

你的写法存在两个核心问题导致节流失效:

  • 每次点击触发handleClick时,才会调用_.throttle生成一个全新的节流函数,不同节流实例之间不会共享计时状态,相当于每次点击都是独立调用,无法触发节流逻辑。
  • 你当前的写法中,点击事件仅执行了handleClick得到节流函数,并没有调用这个返回的节流函数,目标逻辑console.log('hi')甚至不会执行。
可行解决方案

直接在setup执行阶段生成唯一的节流函数实例赋值给handleClick即可,setup在组件生命周期内仅执行一次,生成的节流函数会全局共享计时状态,节流即可正常生效。同时建议在组件卸载时调用节流实例的cancel方法清理定时器,避免内存泄漏。

修正后代码如下:

<template>
  <div id="app">
    <button @click="handleClick">Click</button>
  </div>
</template>

<script>
import _ from 'lodash';
import { onUnmounted } from 'vue';

export default {
  name: 'App',
  setup() {
    // 初始化阶段直接生成唯一的节流函数
    const handleClick = _.throttle(function () {
      console.log('hi');
    }, 2000);

    // 组件卸载时清理节流实例
    onUnmounted(() => {
      handleClick.cancel();
    });

    return {
      handleClick,
    };
  },
};
</script>

如果需要给点击事件传递参数,直接在节流函数的形参中接收即可:

const handleClick = _.throttle((id) => {
  console.log('接收的参数id:', id);
}, 2000);

模板中正常传参调用即可:

<button @click="handleClick(1)">传参点击</button>

内容的提问来源于stack exchange,提问作者wutai

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 13:24:08