Vue: как объявить debounce метод

от автора

в

В Vue.js вы можете объявить метод с debounce (задержкой) с помощью сторонних библиотек, таких как lodash, или вручную, используя setTimeout. Вот как это можно сделать:

1. Использование lodash.debounce

Установите lodash, если он еще не установлен:

npm install lodash

Затем в вашем компоненте Vue:

<template>
  <input v-model="inputValue" @input="handleInput" />
</template>

<script>
import { debounce } from 'lodash';

export default {
  data() {
    return {
      inputValue: ''
    };
  },
  methods: {
    handleInput: debounce(function() {
      this.performSearch();
    }, 300), // Задержка в 300 мс
    performSearch() {
      // Ваш код для выполнения поиска или другой логики
      console.log('Searching for:', this.inputValue);
    }
  }
};
</script>

2. Ручная реализация debounce

Если вы не хотите использовать сторонние библиотеки, вы можете реализовать debounce вручную:

<template>
  <input v-model="inputValue" @input="handleInput" />
</template>

<script>
export default {
  data() {
    return {
      inputValue: '',
      timeout: null
    };
  },
  methods: {
    handleInput() {
      if (this.timeout) {
        clearTimeout(this.timeout);
      }
      this.timeout = setTimeout(() => {
        this.performSearch();
      }, 300); // Задержка в 300 мс
    },
    performSearch() {
      // Ваш код для выполнения поиска или другой логики
      console.log('Searching for:', this.inputValue);
    }
  }
};
</script>

3. Использование vue-debounce (альтернативный подход)

Если вы хотите использовать готовое решение, вы можете установить пакет vue-debounce:

npm install vue-debounce

Затем в вашем компоненте:

<template>
  <input v-model="inputValue" v-debounce:300ms="handleInput" />
</template>

<script>
import { debounce } from 'vue-debounce';

export default {
  data() {
    return {
      inputValue: ''
    };
  },
  directives: {
    debounce
  },
  methods: {
    handleInput() {
      this.performSearch();
    },
    performSearch() {
      // Ваш код для выполнения поиска или другой логики
      console.log('Searching for:', this.inputValue);
    }
  }
};
</script>

Итог

  • Lodash: Простое и надежное решение с использованием популярной библиотеки.
  • Ручная реализация: Подходит, если вы не хотите добавлять дополнительные зависимости.
  • Vue-debounce: Готовое решение для Vue, если вы хотите использовать директиву.

Выберите подход, который лучше всего подходит для вашего проекта.


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Сколько будет 5 + 8?