当前位置:首页 > VUE

vue的防抖实现

2026-02-22 09:04:51VUE

防抖的基本概念

防抖(Debounce)是一种优化高频触发事件的技术,确保事件在停止触发后延迟执行。适用于输入框搜索、窗口调整等场景。

Vue 中实现防抖的方法

方法一:使用 Lodash 的 _.debounce

安装 Lodash 并导入 debounce 方法:

npm install lodash

在 Vue 组件中使用:

import { debounce } from 'lodash';

export default {
  methods: {
    handleInput: debounce(function(event) {
      // 实际逻辑,例如发起 API 请求
      console.log(event.target.value);
    }, 500) // 延迟 500 毫秒
  }
}

模板中绑定事件:

<input @input="handleInput" />

方法二:手动实现防抖函数

自定义防抖函数,适用于不想引入 Lodash 的场景:

export default {
  methods: {
    debounce(func, delay) {
      let timeoutId;
      return function(...args) {
        clearTimeout(timeoutId);
        timeoutId = setTimeout(() => {
          func.apply(this, args);
        }, delay);
      };
    },
    handleInput(event) {
      const debouncedFn = this.debounce(() => {
        console.log(event.target.value);
      }, 500);
      debouncedFn();
    }
  }
}

方法三:使用 Vue 3 的 setup 语法

在 Vue 3 的 Composition API 中实现:

import { ref } from 'vue';
import { debounce } from 'lodash';

export default {
  setup() {
    const searchQuery = ref('');

    const debouncedSearch = debounce(() => {
      console.log(searchQuery.value);
    }, 500);

    return {
      searchQuery,
      debouncedSearch
    };
  }
}

模板绑定:

vue的防抖实现

<input v-model="searchQuery" @input="debouncedSearch" />

注意事项

  • 内存泄漏:在组件销毁时清除防抖定时器,可通过 beforeUnmount 生命周期处理。
  • 参数传递:确保防抖函数能正确访问事件对象或组件上下文(如使用 apply 或箭头函数)。
  • 延迟时间:根据实际需求调整延迟时间(如搜索建议通常用 300-500ms)。

清除定时器的示例

export default {
  data() {
    return {
      timeoutId: null
    };
  },
  methods: {
    debounce(func, delay) {
      clearTimeout(this.timeoutId);
      this.timeoutId = setTimeout(func, delay);
    }
  },
  beforeUnmount() {
    clearTimeout(this.timeoutId);
  }
}

标签: 防抖vue
分享给朋友:

相关文章

vue实现选择本地文件

vue实现选择本地文件

实现文件选择功能 在Vue中实现本地文件选择可以通过HTML原生的<input type="file">元素实现。创建一个基本的文件选择组件: <template> &l…

computed vue 实现

computed vue 实现

computed 在 Vue 中的基本用法 Vue 的 computed 属性用于声明依赖于其他数据的计算属性。当依赖的数据变化时,计算属性会自动重新计算并缓存结果。 export defaul…

vue实现爬虫

vue实现爬虫

Vue 实现爬虫的基本思路 Vue.js 本身是一个前端框架,主要用于构建用户界面。要实现爬虫功能,通常需要结合后端技术或浏览器自动化工具。以下是几种常见的方法: 方法一:Vue + Node.js…

vue实现联动

vue实现联动

Vue 实现联动效果 联动效果通常指多个组件或表单元素之间相互影响,例如选择省份后动态加载城市列表。Vue 提供了多种方式实现联动,包括数据绑定、计算属性、侦听器等。 数据驱动联动 通过 Vue 的…

vue实现组件

vue实现组件

Vue 组件实现基础 Vue 组件是可复用的 Vue 实例,用于封装 UI 和逻辑。通过 .vue 文件或直接注册组件实现。 单文件组件 (SFC) 示例 <template>…

vue  实现关联属性

vue 实现关联属性

Vue 实现关联属性 在 Vue 中实现关联属性通常涉及计算属性(computed properties)或侦听器(watchers),用于根据其他属性的变化动态更新目标属性。 使用计算属性 计算属…