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 kamuKode
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
| Parameter | Tipe | Default | Deskripsi |
|---|---|---|---|
| value | T | — | Nilai yang akan di-debounce (generic) |
| delay | number | 300 | Waktu tunda dalam ms |
Best Practices
- Pilih delay yang tepat: 300-500ms untuk search input, 1000ms untuk save otomatis
- Cleanup: Effect akan cleanup timeout otomatis saat komponen unmount
- Generic type: Mendukung tipe data apapun (string, number, object, dll.)
