Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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
- 이진탐색
- 알고리즘
- 프로세스
- 연결 리스트
- 스택
- 웹팩
- 프로그래머스
- alexnet
- 컨테이너
- GraphQL
- vue3
- RT scheduling
- 연결리스트
- 프론트엔드
- 코딩테스트
- RxJS
- 포인터
- 타입스크립트
- cors
- 자바스크립트
- 배열
- 브라우저
- C
- APOLLO
- pytorch
- 해시테이블
- 자료구조
- 큐
- Machine Learning
- 릿코드
Archives
- Today
- Total
프린세스 다이어리
[Vue3] lodash debounce 메서드 vue에서 사용하는 방법 본문
728x90
debounce()는 특정 기간 동안 반복된 함수 호출을 마지막 1회만 호출하도록 제어해주는 메서드다.
1. debounce 메서드 Vue 3에서 사용법
1-1. lodash를 install 해주었다고 가정하고, import를 한다.
import {debounce} from 'lodash';
1-2. 기본적인 사용 방법
debounce 는 두 개의 인자를 받는다. 첫 번째는 콜백 함수, 두 번째는 시간(밀리세컨드)이다.
const fetchList = () => {
// 데이터 불러오는 로직
}
debounce(fetchList(), 300)
1-3. Vue3 라이프사이클에 적용하기
자 그럼 이걸 언제 쓰는지 직접 작성했던 vue3 기반 프로젝트를 참고하여 기록해보려 한다.
computed: {
isScrolledBottom(): boolean {
// 페이지의 적당한 하단 부분까지 스크롤함을 인지하는 로직
}
},
methods: {
async fetchList() {
// 리스트를 불러오는 로직
},
scrollBottomHandler() {
if (this.isScrolledBottom) {
this.fetchList()
}
}
}
우리 프로젝트에서 리스트를 거의(400px 정도 남긴 시점) 최하단까지 스크롤한 시점에서, 다음 리스트를 fetch해오도록 하는 기능을 구현했다. 최하단까지 스크롤한 다음 데이터를 받아오려고 하면, 사용자가 최하단까지 스크롤하지 않고 다음 리스트를 기다리거나, 새로운 데이터를 응답받는 데 딜레이가 생길 것 같아, 페이지 최하단에서 400px를 남긴 시점에서 요청하도록 했다.
mounted() {
this.debounceFunc = debounce(this.scrollBottomHandler(), 300);
window.addEventListener('scroll', this.debounceFunc);
},
beforeUnmounted() {
window.removeEventListener('scroll', this.debounceFunc);
}
2. 그 외 debounce 사용 예시
스크롤 시, 단순히 스크롤값의 변동을 인지할 때마다 서버에 데이터를 요청하면, 스크롤 픽셀이 변경되는 모든 시점에서 수많은 요청 횟수를 피할 수 없다. 하지만 위와 같이 debounce로 감싸서, 콜백 함수를 300ms 동안 일어난 요청 중 마지막 요청만 유효하도록 만들어 주면 클라이언트 및 서버 모두에서 성능향상을 기대할 수 있다.
일정 시간 동안 반복된 똑같은 함수 호출을 강제로 막았다가 마지막에만 호출하도록 하는 이 debounce의 기능은 사용자가 input 입력을 진행할 때도 적용할 수 있다. 이 외에도 브라우저 사이즈 조절에 따라 호출되는 메서드가 있다면 마찬가지로 debounce가 의미 있게 쓰일 것이다.
728x90
'FE' 카테고리의 다른 글
[Vue3] Axios로 로컬에 있는 json 목데이터 가져오는 법 참쉽죠 (0) | 2021.09.19 |
---|---|
[Vue3] [Vue warn]: Missing required prop: "list" 해결법 (0) | 2021.09.18 |
웹팩의 핵심 구성 요소 4가지, 프론트엔드 개발에 꼭 필요한 추가 요소 (0) | 2021.09.11 |
웹팩(Webpack)의 역할과 프론트엔드 개발에 웹팩이 필요한 이유 (0) | 2021.09.10 |
프론트엔드 컴파일 에러(Compile Error) vs 런타임 에러(Runtime error) vs 논리 오류(Logical Error), 예시 (0) | 2021.09.09 |
Comments