use-debounce-hook
typescript

use-debounce-hook

A custom React hook to debounce function calls and reduce unnecessary executions

Instalasi

Instalasibash
npm install @cupofcode/hooks
// atau copy hook langsung ke project kamu

Kode

Kodetypescript
import { useState, useEffect } from 'react';
/**
* Debounce sebuah nilai dengan delay tertentu.
* Berguna untuk search input, filter, atau autocomplete.
*
* @param value - Nilai yang akan di-debounce
* @param delay - Waktu tunda dalam milidetik (default: 300ms)
*/
export function useDebounce<T>(value: T, delay: number = 300): T {
const [debouncedValue, setDebouncedValue] = useState<T>(value);
useEffect(() => {
const handler = setTimeout(() => {
setDebouncedValue(value);
}, delay);
return () => {
clearTimeout(handler);
};
}, [value, delay]);
return debouncedValue;
}

Penggunaan

Penggunaantsx
import { useState, useEffect } from 'react';
import { useDebounce } from './hooks/useDebounce';
function SearchUser() {
const [searchTerm, setSearchTerm] = useState('');
const debouncedSearch = useDebounce(searchTerm, 500);
useEffect(() => {
if (debouncedSearch) {
fetch(`/api/users?q=${debouncedSearch}`)
.then(res => res.json())
.then(data => console.log('Results:', data));
}
}, [debouncedSearch]);
return (
<input
type="text"
value={searchTerm}
onChange={(e) => setSearchTerm(e.target.value)}
placeholder="Cari user..."
/>
);
}

Parameter

ParameterTipeDefaultDeskripsi
valueT—Nilai yang akan di-debounce (generic)
delaynumber300Waktu tunda dalam ms

Best Practices

  1. Pilih delay yang tepat: 300-500ms untuk search input, 1000ms untuk save otomatis
  2. Cleanup: Effect akan cleanup timeout otomatis saat komponen unmount
  3. Generic type: Mendukung tipe data apapun (string, number, object, dll.)