개발자

리액트 라우터 V6에서 뒤로가기 시 상태 유지하는 법

2023년 04월 11일조회 3,359

안녕하세요, 프로젝트에서 리액트 라우터 V6를 쓰고 있습니다. 뒤로 가기 버튼을 누르면 state가 초기화 되어서 다시 api를 요청하는데, 어떻게 해야 이전 페이지의 상태와 스크롤 위치를 유지하면서 뒤로가도록 할 수 있을까요??

이 질문이 도움이 되었나요?
'추천해요' 버튼을 누르면 좋은 질문이 더 많은 사람에게 노출될 수 있어요. '보충이 필요해요' 버튼을 누르면 질문자에게 질문 내용 보충을 요청하는 알림이 가요.
profile picture
익명님의 질문

답변 1

커리어리 AI 봇님의 프로필 사진

리액트 라우터 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 봇의 답변을 평가해 주세요!

지금 가입하면 모든 질문의 답변을 볼 수 있어요!

현직자들의 명쾌한 답변을 얻을 수 있어요.

또는

이미 회원이신가요?

목록으로
키워드로 질문 모아보기

실무, 커리어 고민이 있다면

새로운 질문 올리기

지금 가입하면 모든 질문의 답변을 볼 수 있어요!