Notice
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- Project
- react native picker
- 리액트
- PongWorld
- Next.js
- fire base
- Access Key 생성
- React
- error
- react native 개발
- AWS
- firebase 라이브러리
- AWS Access Key
- 리액트 네이티브
- 에러
- GIT
- 리액트 네이티브 에러
- aws bucket 정책
- babel.config.js
- 리엑트 네이티브 아이콘
- img upload
- react native
- 문자열 대소문자
- react native 세팅
- 백준
- react native CLI
- react native font
- js
- 문자열 대소문자 구별
- s3 upload
Archives
- Today
- Total
밝을희 클태
[ JavaScript / TypeScript ] Debounce 함수 구현 본문
Debounce는 일정 시간 동안 이벤트가 발생하지 않았을 때 함수를 호출한다. 예시로
window.addEventListener('resize', function(){
console.log('hello');
});
위의 resize 이벤트가 발생할 때마다 "hello"가 콘솔에 찍힌다고 하면 뷰포트의 크기를 조절할 때 엄청 많은 양의 콘솔이 찍히게 된다. resize 이벤트마다 코드를 실행해야 하는 경우가 있겠지만, 그렇지 않은 경우라면 매우 비효율적이다. 꼭 필요한 경우가 아니라면 Debounce를 사용해서 적절하게 함수 호출 횟수를 조절하는 게 좋다.
debounce 함수의 주어진 매개변수를 보면 콜백 함수(func), 지연 시간(wait)을 가지고 있다. debounce 함수 내부에서 클로저를 리턴해준다. setTimeout()은 타이머 ID를 반환해 주며 해당 클로저의 상위 스코프에 있는 id에 값을 저장해 준다. wait보다 빠른 시간에 함수가 재호출 되면 id변수에 저장된 타이머 ID로 이전에 등록된 타이머를 취소해 준다.
function debounce(func: () => void, wait: number) {
let id: number | undefined;
return function () {
clearTimeout(id);
id = window.setTimeout(func, wait);
};
}
export default debounce;
해당 함수를 사용하기 위해서 꼭 구현을 해야 하는 건 아니다
https://www.npmjs.com/package/debounce
https://www.npmjs.com/package/lodash
그래도 이 함수는 구현이 간단하기 때문에, 외부 라이브러리에 의존하지 않고 직접 구현을 해보면 좋을 거 같다. 의존성은 무조건 최소화하는 것이 좋기 때문에 해당 유틸리티 말고도 프로젝트를 진행하면서 가능한 모든 부분은 직접 구현을 해야겠다.
'JavaScript' 카테고리의 다른 글
[ JavaScript ]자바스크립트는 싱글 스레드인데 어떻게 멀티 스레드처럼 동작을 할까? (3) | 2024.08.28 |
---|---|
[ JS ] searchParams 다루기 (0) | 2024.07.06 |
[ JavaScript ] 렉시컬 스코프(Lexical Scope)와 렉시컬 환경(Lexical Environment) (0) | 2024.05.11 |
[ TypeScript / JavaScript ] DOM 객체 타입 (0) | 2024.05.04 |
[ JavaScript / NextJS / React ] 랜덤으로 움직이는 별들을 만들어보자 (0) | 2024.04.23 |