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 — 這會導致防抖出現故障。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM