当前位置:首页 > VUE

vue的防抖实现

2026-02-22 09:04:51VUE

防抖的基本概念

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

Vue 中实现防抖的方法

方法一:使用 Lodash 的 _.debounce

安装 Lodash 并导入 debounce 方法:

npm install lodash

在 Vue 组件中使用:

vue的防抖实现

import { debounce } from 'lodash';

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

模板中绑定事件:

<input @input="handleInput" />

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

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

vue的防抖实现

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
    };
  }
}

模板绑定:

<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中实现轮询可以通过setInterval或setTimeout配合递归调用完成。轮询通常用于定期向服务器请求数据更新。 使用setInterval的简单示例: data…

vue实现递归

vue实现递归

Vue 实现递归组件的方法 在 Vue 中实现递归组件通常用于处理树形结构数据(如菜单、评论列表、文件目录等)。以下是具体实现方法: 定义递归组件 通过 name 选项让组件可以递归调用自身:…

vue slot实现

vue slot实现

vue slot 的实现方法 在 Vue 中,slot 是一种内容分发机制,允许父组件向子组件传递模板内容。以下是几种常见的 slot 实现方式: 默认 slot 默认 slot 是最基础的 slo…

vue实现公式

vue实现公式

在Vue中实现公式展示或计算可以通过多种方式实现,以下为具体方法: 使用模板插值与计算属性 若公式较简单,可直接在模板中使用插值表达式或计算属性。例如计算圆的面积: <template&…

vue实现token

vue实现token

Vue 中实现 Token 认证的方法 在 Vue 中实现 Token 认证通常涉及前端与后端的交互,包括 Token 的获取、存储、发送和刷新等操作。以下是具体实现步骤: 获取 Token 用户…

vue实现oauth

vue实现oauth

Vue 实现 OAuth 的步骤 安装必要的依赖 确保项目中安装了 axios 和 vue-router。OAuth 通常需要发送 HTTP 请求和处理路由跳转。 npm install axio…