서론
React를 이용해 SPA를 만들 때면, 페이지를 이동할 때마다 스크롤의 위치가 이전 페이지 그대로 고정되어 불편한 점이 많았다.
편의성 개선을 위해 페이지를 전환할 때마다 스크롤을 맨 위로 이동시키는 방법에 대해 알아보겠다.
컴포넌트 만들기
하나의 특정 동작만을 위한 코드가 필요하기 때문에 개별 컴포넌트에 코드를 적는다.
또, 길지 않은 코드지만 가독성면에서도 개별 컴포넌트로 관리하는 것이 좋아 보인다.
컴포넌트 이름은 아무렇게나 지어도 상관없다.
import { useEffect } from 'react';
import { useLocation } from 'react-router-dom';
export default function PageToTop() {
const { pathname } = useLocation();
useEffect(() => {
window.scrollTo(0, 0);
}, [pathname]);
return null;
}
useEffect 훅을 사용해서 현재 페이지의 pathname값이 변경될 때마다 사용자의 스크롤을 맨 위로 올려주는 로직이다.
생성한 컴포넌트 라우터 안에 넣어주기
생성한 컴포넌트는 BrowserRouter 내부에 넣어주면 된다.
import React from 'react';
import ReactDOM from 'react-dom/client';
import App from './App';
import { BrowserRouter } from 'react-router-dom';
import { RecoilRoot } from 'recoil';
// css
import './CSS/index.css';
// components
import PageToTop from './PageToTop';
const root = ReactDOM.createRoot(document.getElementById('root'));
root.render(
<React.StrictMode>
<BrowserRouter basename={process.env.PUBLIC_URL}>
<RecoilRoot>
<PageToTop /> // ---> 페이지 전환시 스크롤 맨 위로
<App />
</RecoilRoot>
</BrowserRouter>
</React.StrictMode>
);
완성본
https://github.com/mediumryan/ryan-shopping
참고
'코딩 참고 > React' 카테고리의 다른 글
[React] alert를 손쉽게 sweetalert2 라이브러리 (0) | 2024.02.01 |
---|---|
[React] Recoil-persist (0) | 2024.01.16 |
[React] 슬라이드 만들기가 쉬워지는 마법의 라이브러리 (0) | 2023.10.31 |
[React] Apexcharts js 사용후기 (0) | 2023.09.29 |
[React] useGeolocation 사용후기 (0) | 2023.09.26 |