TSX
Public
Reusable useDebouncedValue Hook
Delay a rapidly changing value before triggering searches, validation, or API requests.
#react
#hooks
#debounce
#utility
TSX
'use client';
import { useEffect, useState } from 'react';
export function useDebouncedValue<T>(
value: T,
delay = 300,
): T {
const [debouncedValue, setDebouncedValue] = useState(value);
useEffect(() => {
const timeoutId = window.setTimeout(() => {
setDebouncedValue(value);
}, delay);
return () => {
window.clearTimeout(timeoutId);
};
}, [value, delay]);
return debouncedValue;
}
export function SearchBox() {
const [query, setQuery] = useState('');
const debouncedQuery = useDebouncedValue(query, 400);
useEffect(() => {
if (debouncedQuery.length < 2) return;
console.log('Search for:', debouncedQuery);
}, [debouncedQuery]);
return (
<input
value={query}
onChange={(event) => setQuery(event.target.value)}
placeholder="Search"
/>
);
}