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

1、安装

go 复制代码
npm i --save lodash.debounce

2、引入

go 复制代码
import debounce from 'lodash.debounce'

3、使用

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

第一种:

go 复制代码
handleInput: debounce(function (val) {
  console.log(val)
}, 200)

第二种:

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

这两种使用方式效果一样

观察者防抖:

go 复制代码
<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>

事件处理器防抖:

go 复制代码
<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中直接调用,就像这样

go 复制代码
<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 --- 这会导致防抖出现故障。

相关推荐
患得患失9491 小时前
【前端】【面试】ref与reactive的区别
前端·面试·vue3
brzhang2 小时前
麻了,Expo 出了一个 a0.dev,可以一句话生成一个 react native App,这下移动端客户端!卒!
前端·后端
大模型铲屎官2 小时前
CSS 性能优化全攻略:提升网站加载速度与流畅度
前端·css·性能优化·html·css3·css性能优化
Lightning-py2 小时前
工具-screen-管理终端会话(服务器长时间运行任务)
linux·运维·服务器·前端·chrome
迷途小码农零零发2 小时前
React进行路由跳转的方法汇总
前端·javascript·react.js
林的快手2 小时前
HTML 简介
java·服务器·前端·算法·spring·html
某柚啊2 小时前
vscode设置保存时自动缩进和格式化
前端·javascript·vscode·编辑器
录大大i2 小时前
HTML之JavaScript对象声明
前端·javascript·html
计算机-秋大田2 小时前
基于Spring Boot+VUE的个人驾校预约管理系统设计与实现(LW+源码+)
java·vue.js·spring boot·后端·课程设计
程序员白彬2 小时前
vue3 怎么自动全局注册某个目录下的所有 vue 和 tsx 组件
前端·javascript·vue.js