返回顶部

vue——debounce防抖函数无效

参考:

vue记录-vue中使用lodash _.debounce防抖不生效原因,解决方案

https://blog.csdn.net/Delete_89x/article/details/122000444

 

我的情况:搜索关键词时,输入框输入123,会搜索1,12,123,debounce防抖无效

 

问题代码:

<el-input
    v-model="condition"
    placeholder="请输入"
    @input="inputChange"
></el-input>

...

load() {
      // 搜索列表
},
// 问题处
inputChange() {
    debounce(this.load())
},  

  

 

封装的debonce函数:

/**
 * 防抖函数 短期内大量触发同一事件,只会执行最后触发的一次
 * @param {Function} fn 需要防抖的函数
 * @param {Number} delay 毫秒,防抖期限值
 */
export const debounce = (fn, delay = 500) => {
  let timer = null;
  return function () {
    if (timer) {
      clearTimeout(timer);
    }
    timer = setTimeout(() => {
      fn.apply(this, arguments);
    }, delay);
  };
};

 

原因:debounce()返回的是一个函数,一个完成的执行应该是:debounce()(),问题代码直接单纯的调用一次,拿到了返回函数,但是并没有执行

解决方法:执行返回的函数

 

修改后的代码:

methods:{
    /**
     * inputChange拿到debounce()的返回结果 - 函数
     * 这样input事件触发的时候就直接是debounce()()了,所以是可以正常执行的
     */
    inputChange: debounce(function () { // 注意,不要在debounce里写箭头函数,否则this的指向就是undefined,而不是Vue实例对象
        this.load();
    }),
}

 

  

 

posted @ 2023-08-21 16:05  前端-xyq  阅读(1884)  评论(0编辑  收藏  举报