useDebounce
Introduce
일정 시간(delay) 동안 호출이 연속적으로 발생하면, 마지막 호출이 끝난 후에만 콜백 함수가 실행되도록 지연시키는 훅입니다.
const useDebounce = <T extends unknown[]>(
callback: (...args: T) => void,
delay: number
): (...args: T) => void
- 입력 필드나 스크롤 이벤트와 같은 상황에서 불필요한 렌더링이나 API 호출을 줄여 성능을 최적화할 수 있습니다.
Props
callback
: 사용자가 연속적인 동작을 멈춘 후 실행되는 콜백함수delay
: 지연 시간(밀리초)
Returns
(...args: T) => void
: 디바운스된 콜백 함수
Examples
TestComponent.tsx
const TestComponent = () => {
const [searchText, setSearchText] = useState('');
const [debouncedText, setDebouncedText] = useState(searchText);
const handleChange = (e: ChangeEvent<HTMLInputElement>) => {
const newValue = e.target.value;
setSearchText(newValue);
debounceSearchText(newValue);
};
const debounceSearchText = useDebounce((text: string) => {
setDebouncedText(text);
}, 200);
const filteredUsers = users.filter((u) =>
u.name.toLowerCase().includes(debouncedText.toLowerCase())
);
return (
<div>
<input type="text" value={searchText} onChange={handleChange} />
<ul>
{filteredUsers.map((u) => (
<li key={u.id}>{u.name}</li>
))}
</ul>
</div>
);
};