🛠️ 처음부터 만드는 Debounce — 마지막 입력 후 일정 시간 뒤에만 실행하기
Throttle과의 차이
검색창에서 Debounce는 사용자가 입력을 멈춘 후 검색을 시작하고, Throttle은 입력 중에도 주기적으로 검색 결과를 보여줍니다.
10줄 구현
```typescript
function debounce
fn: T,
delay: number
): (...args: Parameters
let timeout: NodeJS.Timeout;
return function (...args: Parameters
clearTimeout(timeout);
timeout = setTimeout(() => fn(...args), delay);
};
}
```
실제 사용 예
```typescript
// 검색창 — 입력 멈춘 후 300ms뒤 API 호출
const handleSearch = debounce(async (query: string) => {
const results = await fetch(`/api/search?q=${query}`);
displayResults(results);
}, 300);
input.addEventListener('input', (e) => {
handleSearch((e.target as HTMLInputElement).value);
});
// 윈도우 리사이즈 — 리사이즈 멈춘 후 처리
const handleResize = debounce(() => {
console.log('새 크기:', window.innerWidth);
}, 500);
window.addEventListener('resize', handleResize);
```
언제 쓰나?
공식 문서: [MDN setTimeout](https://developer.mozilla.org/en-US/docs/Web/API/setTimeout)
Comments (0)
💬
No comments yet.
Be the first to comment!