Retrasa la ejecución de una función hasta que deje de ser llamada. Perfecto para búsquedas y eventos frecuentes.
Retrasa la ejecución de una función hasta que pase un tiempo sin nuevas llamadas. Útil para evitar ejecuciones innecesarias (como búsquedas mientras el usuario escribe).
import { useDebouncedFn } from "@blifedesarrollo/hooks";const [searchTerm, setSearchTerm] = useState("");
// Retorna un array: [función debounced, función para cancelar]
const [debouncedSearch, cancelSearch] = useDebouncedFn((query: string) => {
// Hacer búsqueda en API
fetch(`/api/search?q=${query}`).then(/* ... */);
}, 400);
// Al escribir, se retrasa la búsqueda
const handleChange = (value: string) => {
setSearchTerm(value);
debouncedSearch(value); // ← Solo se ejecuta si no hay más cambios en 400ms
};Sin debounce: Cada letra dispara una búsqueda (muchas llamadas)
Con debounce: Solo busca cuando el usuario deja de escribir (una llamada)
const [debouncedSearch, cancelSearch] = useDebouncedFn(searchFunction, 400);
// Cancelar si el usuario hace otra acción
const handleCancel = () => {
cancelSearch(); // ← Cancela la búsqueda pendiente
};| Parámetro | Tipo | Descripción |
|---|---|---|
callback | (...args: any[]) => void | Función a ejecutar después del retardo |
delay | number | Tiempo de espera en milisegundos (opcional, default: 0) |
Retorna un array con dos valores:
const [debouncedFunction, cancel] = useDebouncedFn(callback, delay);| Elemento | Tipo | Descripción |
|---|---|---|
debouncedFunction | function | Función debounced (acepta los mismos argumentos) |
cancel | () => void | Cancela cualquier ejecución pendiente |
Ejemplo de uso:
const [debouncedSearch, cancelSearch] = useDebouncedFn((query) => {
// hacer búsqueda
}, 400);
// Usar la función
debouncedSearch("texto");
// Cancelar si es necesario
cancelSearch();resize, scroll, mousemove