debounce를 사용하기 위해 lodash 패키지를 까는 것은 너무 비효율적이다. 간단한 debounce 함수를 이용해보자!
// src/utils/debounce.ts
export const debounce = <T extends (...args: any[]) => any>(
fn: T,
delay: number,
) => {
let timeout: ReturnType<typeof setTimeout>;
return (...args: Parameters<T>): ReturnType<T> => {
let result: any;
if (timeout) clearTimeout(timeout);
timeout = setTimeout(() => {
result = fn(...args);
}, delay);
return result;
};
};
import { debounce } from '@/utils/debounce';
function useDebounceSearch() {
const [keyword, setKeyword] = useState<string>('');
const getDebounce = debounce((data) => {
setKeyword(data);
}, 500); // 0.5초 동안 이벤트가 발생하지 않으면 setKeyword(data)를 실행
const onChangeSearch = (event: ChangeEvent<HTMLInputElement>) => {
getDebounce(event.target.value);
};
return { keyword, onChangeSearch };
}
[React/TypeScript] Debounce, 일정 시간동안 발생한 이벤트 중 마지막만 실행 | lasbe | Tistory