欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

vue中使用 lodash Debounce防抖不生效原因

程序员文章站 2022-03-26 14:04:58
...

最近项目需要做这样一个需求:基于element-ui框架的vue项目,输入input框实现实时搜索后台响应的数据。但用户每次按下键盘就发送请求会导致系统性能不好等问题,这时需要考虑到用防抖去解决这个问题。所以我考虑使用输入框监听+lodash库https://www.lodashjs.com/docs/lodash.debounce的防抖来实现。

步骤简单:首先引入+使用

import {debounce} from 'lodash';
<el-form-item label="" prop="">
   <el-input
       placeholder=""
       v-model="formData.keyword"
       @input.native="change"      //注意使用elementUI组件要加上.native
   ></el-input>
 </el-form-item>
methods:{
	change:
	    debounce(()=>{
	      console.log(1111);
	      //todo
	    }, 500),
	//下面这种方式是不可行的,debounce返回了一个函数
	changes(){
      debounce(function(){
        console.log(1111)
      }, 500)      
    },
 }
 

这里要特别注意函数change的写法,必须这种change: 的写法,如果要使用change()要使用调用的方式,但最终有调用debounce的函数还是要另一种写法。

 @keyup.native="search"></el-input>
methods: {  
      // 加载到原型链上的lodash,在getRemote后取不到
    // 注意,这里debounce中的第一个参数,不能写成箭头函数,否则,取不到this
   getRemote: _.debounce(function () {
     console.log(111)
   }, 1000),
   search () {
     this.getRemote()
   }
 }

vue3中也有提及debounce的使用,感兴趣的可以去看看~
https://v3.vuejs.org/guide/data-methods.html#methods
vue中使用 lodash Debounce防抖不生效原因