만약 10000개의 데이터 정보를 map 으로 화면에 뿌리게 되면 어떻게 될까?
이정도는 클라이언트에서 잘 버틸 수 있을지도 모른다... 그럼 10만개는?
많은 데이터를 한꺼번에 뿌리는 방법이 아니라,
원하는 엔드 포인트에 다다랐을 때마다 갱신하는 방법을 사용하면 부하를 줄일 수 있기 때문에
인피니티 스크롤을 사용하게 된다.
인피니티 스크롤 데모
작동하는 것과 코드는 아래 데모에서 확인할 수 있다.
인피니티 스크롤 설명
인피니티 스크롤의 동작 방식은 다음과 같다.
1. 상위 root element 의 가시성을 확인하여
2. 가시성의 변화가 생겼을 때
3. loader.current 와 root 가 교차하였을 때 스크롤 이벤트 발생(데이터 갱신)
코드를 보면 이런 느낌이다.
// IntersectionObserver(스크롤 비동기 감지)
useEffect(() => {
const option = {
root: document.querySelector("infinite-scroll"), // 요소의 가시성을 확인하는 상위(루트) element
rootMargin: "0px", // 루트의 범위
threshold: 1.0, // 어느정도 노출되었을 때 콜백 호출할 지 1.0 = 100% 가시성 즉, 다 보여졌을때
};
// new IntersectionObserver(callback, option)
// callback 은 가시성의 변화가 생겼을 때
// option 은 콜백이 호출되는 상황
const observer = new IntersectionObserver(handleObserver, option);
// map 마지막 부분의 loader.current 와 root 가 교차할 때 스크롤 이벤트 발생
if (loader.current) observer.observe(loader.current);
return () => observer.disconnect();
}, [handleObserver]);
root 에 해당하는 element 와 loader에 해당하는 element 설정이 제일 중요하다.
option 의 경우 어떨 때 옵저버를 작동시킬지 개발자가 조절할 수 있기 때문에 원하는 대로 커스텀하면 된다.
참고 블로그
반응형
'🔥 Javascript > 💙 React' 카테고리의 다른 글
React Jotai 사용법 총 정리(2) - atom 이해 및 기본 유용한 기능 (0) | 2023.02.20 |
---|---|
React Jotai 사용법 총 정리(1) - Jotai는 무엇이고 어떻게 사용하나요? (1) | 2023.01.30 |
Next router 이동 시 알림창 띄울 때 window.onbeforeunload 작동 안되는 문제 해결법 (0) | 2022.10.02 |
React ) 폰트 깨짐 문제 - 크롬 등의 브라우저에서 글씨가 흐려요... (0) | 2022.02.07 |
React 무료 아이콘 라이브러리 추천 (0) | 2022.01.02 |