当前位置: 首页 > news >正文

vue中使用lodash的debounce(防抖函数)

1、安装

npm i --save lodash.debounce

2、引入

import debounce from 'lodash.debounce'

3、使用

<van-search v-model="searchValue" placeholder="输入姓名或工号" @input='handleInput' />

第一种:

handleInput: debounce(function (val) {
  console.log(val)
}, 200)

第二种:

handleInput(val) {
	console.log(val)
}
created() {
	this.handleInput = debounce(this.handleInput, 200) // 搜索框防抖
}

这两种使用方式效果一样

观察者防抖:

<template>
  <input v-model="value" type="text" />
  <p>{{ value }}</p>
</template>
<script>
import debounce from "lodash.debounce";
export default {
  data() {
    return {
      value: "",
    };
  },
  watch: {
    value(...args) {
      this.debouncedWatch(...args);
    },
  },
  created() {
    this.debouncedWatch = debounce((newValue, oldValue) => {
      console.log('New value:', newValue);
    }, 500);
  },
  beforeUnmount() {
    this.debouncedWatch.cancel();
  },
};
</script>

事件处理器防抖:

<template>
  <input v-on:input="debouncedHandler" type="text" />
</template>
<script>
import debounce from "lodash.debounce";
export default {
  created() {
    this.debouncedHandler = debounce(event => {
      console.log('New value:', event.target.value);
    }, 500);
  },
  beforeUnmount() {
    this.debouncedHandler.cancel();
  }
};
</script>

为什么不在method中写好方法,在template中直接调用,就像这样

<template>
  <input v-on:input="debouncedHandler" type="text" />
</template>
<script>
import debounce from "lodash.debounce";
export default {
  methods: {
    // Don't do this!
    debouncedHandler: debounce(function(event) {
      console.log('New value:', event.target.value);
    }, 500)
  }
};
</script>

组件使用 export default { … } 导出的 options 对象,包括方法,会被组件实例重用。

如果网页中有 2 个以上的组件实例,那么所有的组件都会应用 相同 的防抖函数 methods.debouncedHandler — 这会导致防抖出现故障。

相关文章:

  • spring boot和spring cloud的关系
  • Django 操作表中的数据(增删改查)
  • 用python写一个聊天室程序
  • 【二分搜索 C/C++】洛谷P1024 一元三次方程求解
  • 【deepseek 部署中的常见问题及解决方案--亲测有效】
  • 机器视觉中的3d和2d的区别
  • Unity实现UI拖拽
  • 《深度LSTM vs 普通LSTM:训练与效果的深度剖析》
  • 在 UniApp 中封装并连接 WebSocket 及重连机制实现
  • AcWing 798. 差分矩阵
  • 华为小艺支持DeepSeek
  • Python教学-最常用的标准库之一——OS库
  • golang基础库
  • 【SpringBoot苍穹外卖】debugDay03.5
  • Java 设计模式之备忘录模式
  • 2.11学习
  • Unity 命令行设置运行在指定的显卡上
  • Hyper-V管理器连接服务器提示你没有完成此任务所需的权限
  • 日常故障排查 - Linux常用命令
  • C++ 中的继承与派生
  • 侧记|青年为何来沪创新创业?从这一天寻找答案
  • 印巴开始互袭军事目标,专家:冲突“螺旋式升级”后果或不可控
  • 面对非专业人士,科学家该如何提供建议
  • 欧盟决意与俄罗斯能源彻底决裂之际,美国谋划新生意:进口俄气对欧转售
  • 中俄弘扬正确二战史观:缅怀历史,重拾初心,阻止悲剧重演
  • 波音公司计划于2027年交付新版“空军一号”飞机