상식닷컴
로그인
가입하기
2026년 상식닷컴 선정 식당 & 카페 리스트
2025년 2026년 신상 호텔 리스트
최근에 오픈한 호텔을 찾는다면 살펴보세요
일주일 식단표 어플
자동 일주일 식단표 어플
안드로이드
아이폰
주식 & 코인 차트의 신
1000만원으로 2000만원 만들기 프로젝트
수정하기 - switchMap을 사용하여 스크롤 이벤트를 처리하는 방법은?
닉네임
비밀번호
제목
내용
[이미지 업로드는 권한이 있는 사람만 가능. 하단 카톡으로 연락]
switchMap은 RxJS에서 중요한 연산자 중 하나로, 주로 Observable을 변환하고 이전에 구독한 Observable을 취소할 때 사용합니다. 스크롤 이벤트를 처리할 때 switchMap을 사용하면, 사용자 스크롤 이벤트가 빠르게 발생하는 상황에서도 효율적으로 비동기 작업을 관리할 수 있습니다. 아래는 switchMap을 사용하여 스크롤 이벤트를 처리하는 방법에 대한 자세한 설명입니다. --- 1. 기본 아이디어 - 사용자의 스크롤 이벤트는 매우 자주 발생합니다. - 스크롤 위치에 따라 데이터를 로드하거나, API 요청을 보낼 때 여러 요청이 중첩되는 것을 막아야 합니다. - switchMap을 사용하면 새로운 스크롤 이벤트가 발생할 때마다 이전에 시작한 비동기 작업을 취소하고 새로운 작업을 시작할 수 있습니다. 2. 구체적인 예시: 무한 스크롤 구현에서 API 호출 제어 예를 들어, 스크롤하여 페이지 하단에 가까워지면 새로운 데이터를 가져오는 무한 스크롤 기능을 만들 때, 사용자가 빠르게 스크롤할 경우 여러 API 요청이 생길 수 있습니다. 이때 switchMap을 사용하면 마지막 요청만 유효하게 처리되고 이전 요청들은 취소됩니다. 3. 구현 단계 설명 (1) 스크롤 이벤트 감지 - RxJS의 `fromEvent` 연산자를 사용하여 스크롤 이벤트를 Observable로 만듭니다. - 일반적으로 `window` 또는 특정 스크롤 가능 영역의 `scroll` 이벤트를 구독합니다. ```typescript import { fromEvent } from 'rxjs'; const scroll$ = fromEvent(window, 'scroll'); ``` (2) 스크롤 위치 계산 및 기준 설정 - 스크롤 위치가 페이지 하단 일정 기준에 도달했는지 체크해야 합니다. - 예를 들면, 전체 문서 높이 - (현재 스크롤 위치 + 뷰포트 높이)이 일정 값 이하인가를 판단합니다. ```typescript import { map, filter } from 'rxjs/operators'; const scrollPosition$ = scroll$.pipe( map(() => window.scrollY + window.innerHeight), filter(position => position >= document.body.scrollHeight - 100) // 하단 100px 도달 시 ); ``` (3) switchMap으로 데이터 요청 처리 - `scrollPosition$`이 조건에 도달하면, 네트워크 요청 또는 비동기 작업을 시작합니다. - 이때 network 요청 Observable을 `switchMap` 내부에 넣으면, 새로운 스크롤 이벤트가 발생해 다시 조건에 도달하면 이전 요청은 취소되고 새 요청이 시작됩니다. ```typescript import { switchMap } from 'rxjs/operators'; import { ajax } from 'rxjs/ajax'; const loadMore$ = scrollPosition$.pipe( switchMap(() => { // API 호출 Observable 반환, 예를 들어 페이지 번호를 관리한다면 추가 필요 return ajax.getJSON('https://api.example.com/items?page=nextPage'); }) ); ``` --- 4. 추가 고려사항 - 페이지 번호 및 상태 관리 : 무한 스크롤 시 현재 페이지 번호나 로드 가능한 상태를 관리해야 합니다. 이 상태는 별도의 Subject나 BehaviorSubject로 관리하고 switchMap 내부에서 참조할 수 있습니다. - 디바운스 혹은 쓰로틀 적용 : 너무 잦은 스크롤 이벤트 발생 시 API 호출 빈도를 낮추기 위해 `debounceTime` 또는 `throttleTime`을 사용하는 것이 효과적입니다. - 에러 처리 : API 호출 중 에러가 발생할 수 있으므로, `catchError`를 써서 적절히 처리해야 합니다. - 중복 요청 방지 : 이미 마지막 페이지라면 더 이상 요청하지 않도록 조건을 걸어야 합니다. --- 5. 정리 - `switchMap`은 내부 Observable이 새로 만들어지면 기존 Observable 구독을 취소하므로, 스크롤에서 빈번히 발생하는 이벤트를 처리하는 데 적합합니다. - 스크롤 이벤트를 RxJS `fromEvent`로 생성하고, 필요한 위치 조건을 필터링한 뒤 실제 비동기 작업을 `switchMap`으로 처리하면, 빠른 스크롤 시 중복된 요청을 깔끔하게 방지할 수 있습니다. - 무한 스크롤, 검색 자동완성 등에서 매우 유용하며, 반응형 사용자 경험을 만드는 데 필수적인 RxJS 패턴입니다. --- 필요하다면 실제 코드 예제를 좀 더 자세히 작성해 드릴 수도 있습니다.
이용안내
커뮤니티 이용안내
×
- 게시한 게시글로 발생하는 문제는 게시자에게 책임이 있습니다.
- 게시글이 타인/타업체의 저작권을 침해할 경우 모든 책임은 게시자에게 있습니다. 게시자가 모든 손해를 부담해야 합니다.
- 상식닷컴 운영자는 게시자와 상의하지 않고 게시글을 수정 또는 삭제할 수 있습니다.
- 상식닷컴 운영자는 깨끗한 커뮤니티 공간을 만드는 것이 1순위입니다.
수정하기
취소하기