개발자
안녕하세요, 프로젝트에서 리액트 라우터 V6를 쓰고 있습니다. 뒤로 가기 버튼을 누르면 state가 초기화 되어서 다시 api를 요청하는데, 어떻게 해야 이전 페이지의 상태와 스크롤 위치를 유지하면서 뒤로가도록 할 수 있을까요??
답변 1
리액트 라우터 V6에서 뒤로 가기 버튼을 눌렀을 때 상태와 스크롤 위치를 유지하려면, 두 가지 주요 작업을 수행해야 합니다. 1. 상태 유지하기: 상태를 전역 상태 관리 라이브러리(예: Redux, MobX, Zustand 등)를 사용하여 저장하거나, 상위 컴포넌트에서 상태를 관리하도록 할 수 있습니다. 이렇게 하면, 페이지 간 이동 시 상태가 초기화되지 않고 유지됩니다. 2. 스크롤 위치 유지하기: 스크롤 위치를 저장하고 복원할 수 있는 커스텀 훅을 작성해야 합니다. 이렇게 하면 이전 페이지로 돌아갔을 때 스크롤 위치가 유지됩니다. 아래는 스크롤 위치를 유지하는 커스텀 훅 예시입니다. 이제 이 커스텀 훅을 사용하여 앱 또는 각 페이지 컴포넌트에서 스크롤 위치를 유지할 수 있습니다. 상태와 스크롤 위치를 저장하고 복원하는 이 방법을 사용하면, 사용자가 뒤로 가기 버튼을 눌렀을 때 이전 페이지의 상태와 스크롤 위치가 유지됩니다. ----- ✅ Chat GPT의 답변을 평가해 주세요! 틀린 내용은 없는지, 답변이 도움이 되었는지 댓글로 작성해 주세요.
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 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47
import { useLayoutEffect, useRef } from 'react'; import { useLocation } from 'react-router-dom'; const useScrollRestoration = () => { const location = useLocation(); const scrollPositions = useRef({}); useLayoutEffect(() => { // 현재 스크롤 위치 저장 scrollPositions.current[location.key] = window.scrollY; // 이전 페이지로 돌아갔을 때, 저장된 스크롤 위치로 복원 const restoreScrollPosition = () => { if (scrollPositions.current[location.key] !== undefined) { window.scrollTo(0, scrollPositions.current[location.key]); } }; restoreScrollPosition(); }, [location]); }; export default useScrollRestoration; import React from 'react'; import { BrowserRouter, Route, Link } from 'react-router-dom'; import useScrollRestoration from './useScrollRestoration'; const App = () => { useScrollRestoration(); return ( <BrowserRouter> <nav> <Link to="/">Home</Link> <Link to="/page1">Page1</Link> <Link to="/page2">Page2</Link> </nav> <Route exact path="/" component={Home} /> <Route path="/page1" component={Page1} /> <Route path="/page2" component={Page2} /> </BrowserRouter> ); }; export default App;
커리어리 AI 봇의 답변을 평가해 주세요!
지금 가입하면 모든 질문의 답변을 볼 수 있어요!
현직자들의 명쾌한 답변을 얻을 수 있어요.
이미 회원이신가요?
지금 가입하면 모든 질문의 답변을 볼 수 있어요!