[React] 뒤로가기 버튼 감지

2022. 10. 11. 13:21·React/실험실
반응형

react에서 뒤로가기 버튼을 감지하는 작업을 해야할 때가 있다. 

과연 어떤 방법을 사용해야 할까? 

 

세팅

본인은 react-router-dom v6 을 사용하고 있다. 

v6에는 history를 제공해주는 useHistory가 사라져서 따로 패키지를 받아야 한다. 

yarn add history

 

작업 시작

// common/history.ts

import { createBrowserHistory } from "history";

const history = createBrowserHistory();
export default history;

필요할 때마다 createBrowserHistory를 사용해서 history를 만들어도 되지만 그렇게되면 

두번 일을 한다는 느낌이 있어서 따로 만들었다. 

 

history는 액션이 2개가 있는데, push와 pop이다.

 

push

react-router-dom의 link 등을 이용해서 페이지를 이동할 때 발생하는 action이다. 

 

pop 

브라우저에서 앞으로가기, 뒤로가기, 새로고침 버튼을 누를 때 발생하는 action이다. 

 

이것을 사용하면 필요한 경우에 이벤트를 발생할 수 있을 것이다. 

 

const [locationKeys, setLocationKeys] = useState([]);

useEffect(() => {
  return history.listen((location) => {
    if (history.action === "PUSH") {
      setLocationKeys([location.key]);
    }

    if (history.action === "POP") {
      if (locationKeys[1] === location.key) {
        setLocationKeys(([_, ...keys]) => keys);

        // 앞으로 가기
      } else {
        setLocationKeys((keys) => [location.key, ...keys]);

        // 뒤로 가기
        history.push("/detail");
      }
    }
  });
}, [locationKeys, history]);

이것을 필요한 곳에서 useEffect와 함께 사용해서 

뒤로가는 경우, 앞으로 가는 경우 등 필요한 경우와 함께 사용하면 된다. 

 

참고

https://velog.io/@tunakim/React%EC%97%90%EC%84%9C-%EB%B8%8C%EB%9D%BC%EC%9A%B0%EC%A0%80%EC%9D%98-%EB%92%A4%EB%A1%9C%EA%B0%80%EA%B8%B0-%EB%B2%84%ED%8A%BC-%EC%9D%B4%EB%B2%A4%ED%8A%B8-%EA%B0%90%EC%A7%80

 

React에서 브라우저의 뒤로가기 버튼 이벤트 감지

브라우저의 뒤로가기, 앞으로가기 버튼 이벤트 감지를 정리한 글입니다.React router에서 파라미터로 페이지를 구분하는 경우, 브라우저의 뒤로가기 버튼을 눌렀을 때 파라미터에 반응하여 페이지

velog.io

 

반응형
저작자표시 비영리 변경금지 (새창열림)

'React > 실험실' 카테고리의 다른 글

[React] React Query - 기존 상태 관리 라이브러리의 단점  (0) 2022.10.17
[React] Redux와 TypeScript 함께 사용하기  (1) 2022.10.12
[React] Webpack과 Babel과 TypeScript와 React  (1) 2022.10.03
[React] 나만의 리액트 만들기 - 2 - 컴포넌트  (0) 2022.09.30
[React] 나만의 리액트 만들기 - 1 - JSX 그리고 ReactDOM  (1) 2022.09.29
'React/실험실' 카테고리의 다른 글
  • [React] React Query - 기존 상태 관리 라이브러리의 단점
  • [React] Redux와 TypeScript 함께 사용하기
  • [React] Webpack과 Babel과 TypeScript와 React
  • [React] 나만의 리액트 만들기 - 2 - 컴포넌트
잉여개발자
잉여개발자
풀스택 개발자를 목표로 잉여롭게 개발 공부도 하면서 다양한 취미 생활도 즐기고 있는 잉여 개발자입니다.
  • 잉여개발자
    잉여로운 개발일지
    잉여개발자
    • 분류 전체보기 (789)
      • 개발정보 (36)
      • 개발환경 (7)
      • 개발생활 (19)
      • React (141)
        • 이론 (23)
        • 기능 (12)
        • 실험실 (88)
        • 버그 (6)
        • 패스트캠퍼스 (9)
        • Npm (3)
      • React Native (28)
        • 공통 (6)
        • TypeScript (3)
        • JavaScript (18)
        • 버그 (1)
      • Next.js (30)
        • 이론 (13)
        • 실험실 (13)
        • 버그 (3)
      • Web (35)
      • 알고리즘 (202)
        • 풀이 힌트 (39)
      • JavaScript (47)
      • TypeScript (29)
        • 기초 (27)
        • 실험실 (2)
      • Node.js (13)
        • 이론 (0)
        • 기능 (3)
        • 실험실 (9)
        • 버그 (1)
      • 도커 (4)
      • CCNA (22)
        • 이론 (4)
        • 문제 (18)
      • 취미생활 (167)
        • 잉여로운 칵테일 (2)
        • 잉여의 식물키우기 (130)
        • 잉여로운 여행기 (11)
        • 잉여의 제2외국어 (21)
        • 잉여로운 책장 (2)
      • Java (1)
        • Java의 정석 (1)
      • 꿀팁 공유 (3)
  • 태그

    CCNA
    프로그래머스
    타입스크립트
    자바스크립트
    네트워크
    webpack
    ChatGPT
    네이버 부스트캠프
    리얼클래스
    다이소
    redux
    typescript
    영어독학
    리얼학습일기
    next.js
    Node.js
    바질
    리액트
    Docker
    알고리즘
    바질 키우기
    영어회화
    CSS
    Babel
    덤프
    javascript
    react
    식물
    타일러영어
    ReactNative
  • hELLO· Designed By정상우.v4.10.1
잉여개발자
[React] 뒤로가기 버튼 감지
상단으로

티스토리툴바