当前位置:首页 > 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 路由实现内部切换的方法 Vue Router 是 Vue.js 官方的路由管理器,用于实现单页应用(SPA)的页面切换。以下是几种常见的内部路由切换方式: 使用 <router-lin…

vue实现轮询

vue实现轮询

实现轮询的基本方法 在Vue中实现轮询可以通过setInterval或setTimeout配合递归调用完成。轮询通常用于定期向服务器请求数据更新。 使用setInterval的简单示例: data…

vue实现计算

vue实现计算

Vue 实现计算的方法 在 Vue 中实现计算功能可以通过多种方式完成,主要包括计算属性(computed)、方法(methods)和侦听器(watch)。以下是具体的实现方法: 计算属性(Comp…

vue 实现平面

vue 实现平面

Vue 实现平面的方法 在 Vue 中实现平面效果通常涉及 CSS 样式、UI 框架或自定义组件的使用。以下是几种常见方法: 使用 CSS 样式 通过 Vue 的样式绑定或 scoped CSS 为…

vue 实现 confirm

vue 实现 confirm

实现确认对话框的方法 在Vue中实现确认对话框可以通过多种方式完成,包括使用内置组件、第三方库或自定义组件。 使用浏览器原生confirm 最简单的实现方式是直接调用浏览器原生的confirm方法。…

vue实现加载

vue实现加载

Vue 实现加载功能的方法 使用 v-if 或 v-show 控制加载状态 通过数据绑定控制加载动画的显示与隐藏。v-if 会完全移除 DOM 元素,v-show 只是切换 display 属性。…