[리액트/웹] 뒤로가기 막기

JJeong·2022년 10월 19일
0

배경

사용자가 관심매장을 신청하고, 완료가 되면 목록 페이지로 이동한다. 이후 뒤로가기를 하면 다시 신청 페이지가 나오는데 기획쪽에서 이걸 막고 싶다는 의견이 나왔다.
완성도가 떨어져 보여서 나도 막는 게 좋을 것 같다고 생각했다.

해결책

  1. history stack을 직접 조작해보려고 했다.
    하지만 이건 보안 상의 이유로 안 된다고 한다!!
    하긴 누가 내 인터넷 접속 기록을 막 바꿀 수 있다면 문제가 크게 생길 거 같다...
    뒤로가기를 누르면 메인 페이지로 이동시키려 했는데 야심찬 계획이 틀어졌다.😥

  2. 신청 페이지 -> 신청 완료 페이지 -> 목록 페이지 순서에서 컴포넌트를 하나 더 추가했다. 신청 페이지 -> replace 컴포넌트-> 신청 완료 페이지 -> 목록 페이지 이렇게!
    replace 컴포넌트의 목적은 한 번 완료 페이지를 거치고 나면 다시 신청 페이지로 돌아가지 못하게 하는 것이다.
    정확히 말하면, 강제로 완료 페이지로 돌려보낸다.

// replace 컴포넌트

import { useEffect } from "react";
import { useHistory, useLocation } from "react-router-dom";

const ReplaceComp = () => {
  const location = useLocation();
  const history = useHistory();
  const { isOkRoute } = location.state;

  useEffect(() => {
    if (isOkRoute) {
      history.push("/my-store/completion");
    } 
  }, []);
  return null;
};

export default ReplaceComp;

신청 페이지에서 url을 보내줄 때 이렇게 state를 함께 전달해준다.

    history.push({
          pathname: "/my-store/replace",
          state: { isOkRoute: true },
        });

사실, history.go(-1)을 할 때 isOkRoute: false로 바꿀 수 있다면 분기를 태워서 메인으로 보내는 것도 가능할 텐데 그 방법은 찾지 못했다. 찾으면 덧붙여 쓰겠음!😁

1개의 댓글

comment-user-thumbnail
2023년 1월 9일

안녕하세요~ 리액트에서 뒤로가기 제어를 구현했던 문서인데 참고하시면 도움 되실것 같아서 링크 첨부해요~ 화이팅!
https://velog.io/@goyoung2/how-to-control-history-back-in-react

답글 달기