상식닷컴
로그인
가입하기
2026년 상식닷컴 선정 식당 & 카페 리스트
2025년 2026년 신상 호텔 리스트
최근에 오픈한 호텔을 찾는다면 살펴보세요
일주일 식단표 어플
자동 일주일 식단표 어플
안드로이드
아이폰
주식 & 코인 차트의 신
1000만원으로 2000만원 만들기 프로젝트
수정하기 - React에서 스크롤 이벤트를 처리하는 방법은 무엇인가요?
닉네임
비밀번호
제목
내용
[이미지 업로드는 권한이 있는 사람만 가능. 하단 카톡으로 연락]
React에서 스크롤 이벤트를 처리하는 방법은 여러 가지가 있으며, 일반적으로 `window` 객체의 스크롤 이벤트를 사용하거나 특정 DOM 요소에 대한 스크롤 이벤트를 처리하는 방식으로 진행됩니다. 아래에서는 React에서 스크롤 이벤트를 처리하는 방법에 대해 자세히 설명하겠습니다. 1. 기본적인 스크롤 이벤트 처리 React에서 스크롤 이벤트를 처리하기 위해서는 `<a href='https://sangseek.com/sangseeks/useEffect/ko'>useEffect</a>` 훅을 사용하여 컴포넌트가 마운트될 때 이벤트 리스너를 추가하고, 언마운트될 때 이를 정리하는 방식으로 진행합니다. ```jsx import React, { useEffect, useState } from 'react'; const ScrollComponent = () => { const [scrollY, setScrollY] = useState(0); const handleScroll = () => { setScrollY(window.scrollY); }; useEffect(() => { window.addEventListener('scroll', handleScroll); // Cleanup function to remove the event listener return () => { window.removeEventListener('scroll', handleScroll); }; }, []); return ( <div> <h1>Scroll Position: {scrollY}px</h1> {/* 긴 내용을 추가하여 스크롤을 가능하게 합니다. */} <div style={{ height: '2000px', background: 'lightgray' }} /> </div> ); }; export <a href='https://sangseek.com/sangseeks/default/ko'>default</a> ScrollComponent; ``` 2. 특정 요소에 대한 스크롤 이벤트 처리 특정 DOM 요소에 대한 스크롤 이벤트를 처리하고 싶다면, 해당 요소에 대한 참조를 생성하고, 그 요소에 이벤트 리스너를 추가하면 됩니다. ```jsx import React, { useEffect, useRef, useState } from 'react'; const ScrollableComponent = () => { const scrollRef = useRef(null); const [scrollTop, setScrollTop] = useState(0); const handleScroll = () => { if (scrollRef.current) { setScrollTop(scrollRef.current.scrollTop); } }; useEffect(() => { const scrollElement = scrollRef.current; if (scrollElement) { scrollElement.addEventListener('scroll', handleScroll); // Cleanup function return () => { scrollElement.removeEventListener('scroll', handleScroll); }; } }, []); return ( <div> <h1>Scroll Position: {scrollTop}px</h1> <div ref={scrollRef} style={{ height: '200px', overflowY: 'scroll', border: '1px solid black' }} > <div style={{ height: '600px', background: 'lightgray' }}> Scroll me! </div> </div> </div> ); }; export default ScrollableComponent; ``` 3. 성능 최적화 스크롤 이벤트는 매우 자주 발생할 수 있기 때문에, 성능을 최적화하는 것이 중요합니다. 이를 위해 `debounce` 또는 `throttle` 기법을 사용할 수 있습니다. Lodash와 같은 라이브러리를 사용하면 쉽게 구현할 수 있습니다. ```jsx import React, { useEffect, useState } from 'react'; import { debounce } from 'lodash'; const DebouncedScrollComponent = () => { const [scrollY, setScrollY] = useState(0); const handleScroll = debounce(() => { setScrollY(window.scrollY); }, 100); // 100ms 간격으로 호출 useEffect(() => { window.addEventListener('scroll', handleScroll); return () => { window.removeEventListener('scroll', handleScroll); }; }, []); return ( <div> <h1>Scroll Position: {scrollY}px</h1> <div style={{ height: '2000px', background: 'lightgray' }} /> </div> ); }; export default DebouncedScrollComponent; ``` 4. 스크롤 위치 저장 <a href='https://sangseek.com/sangseeks/애플/ko'>애플</a>리케이션에서 스크롤 위치를 저장하고 복원하는 기능이 필요할 수 있습니다. 이 경우, `localStorage`를 사용하여 스크롤 위치를 저장하고, 컴포넌트가 마운트될 때 해당 위치로 스크롤을 이동할 수 있습니다. ```jsx import React, { useEffect, useState } from 'react'; const ScrollPositionComponent = () => { const [scrollY, setScrollY] = useState(0); const handleScroll = () => { setScrollY(window.scrollY); localStorage.setItem('scrollPosition', window.scrollY); }; useEffect(() => { const savedScrollY = localStorage.getItem('scrollPosition'); if (savedScrollY) { window.scrollTo(0, parseInt(savedScrollY, 10)); } window.addEventListener('scroll', handleScroll); return () => { window.removeEventListener('scroll', handleScroll); }; }, []); return ( <div> <h1>Scroll Position: {scrollY}px</h1> <div style={{ height: '2000px', background: 'lightgray' }} /> </div> ); }; export default ScrollPositionComponent; ``` 결론 React에서 스크롤 이벤트를 처리하는 방법은 다양하며, 기본적인 이벤트 리스너 추가부터 성능 최적화, 스크롤 위치 저장 및 복원까지 여러 가지 방법을 사용할 수 있습니다. 이러한 방법들을 적절히 조합하여 사용자 경험을 향상시키는 것이 중요합니다.
이용안내
커뮤니티 이용안내
×
- 게시한 게시글로 발생하는 문제는 게시자에게 책임이 있습니다.
- 게시글이 타인/타업체의 저작권을 침해할 경우 모든 책임은 게시자에게 있습니다. 게시자가 모든 손해를 부담해야 합니다.
- 상식닷컴 운영자는 게시자와 상의하지 않고 게시글을 수정 또는 삭제할 수 있습니다.
- 상식닷컴 운영자는 깨끗한 커뮤니티 공간을 만드는 것이 1순위입니다.
수정하기
취소하기