• ✏️ React의 Link, useNavigate

    2024. 1. 29.

    by. 서카츄

     

    오늘은 링크를 타고 이동하는 훅들에 대해서 공부를 해보았다.

    `Link`태그와 `useNavigate`훅에 대해서 알아보도록 하자!

     

     

     

    들어가기 전에!

    `useNavigate`훅은 react-router-dom에서 제공해 주는 hook이기 때문에

    사용하려면 react-router-dom을 설치 해야 한다.

    npm i react-router-dom
    //또는
    yarn add react-router-dom

     

     

     


     

    Link 태그

     

    사용자가 클릭해서 페이지를 이동할 때 사용한다.

    하이퍼 링크 텍스트나 페이지를 이동할 때 사용한다.

    클릭시 바로 이동하는 로직 구현할때 쓴다고 생각하면 된다!

    `html`의 `a`태그라고 생각하면 편하다.

    `nav`나 `aside menu`등에서 사용한다.

     

     

    사용예시

    <Link to="/main">메인으로 이동하기</Link>

     

     

     

     

    하지만 Link태그에서도 아래 예시처럼 데이터를 보낼 수 있다.

    <Link to={`/main`} state={{ test: "hello world" }} >
       test
    </Link>

     


     

    useNavigate hook

    useNavigate는 웹 페이지 이동 시 추가적인 로직이 필요할 때,

    단순히 페이지만 이동시키는게 아닌, 특정한 코드의 실행이 끝나고 페이지를 이동시킬 때 사용하게 된다.

    대부분 특정 액션이 있을 때 쓴다고 생각하면 편하다.

    ex) 로그인 버튼을 클릭할 때
    회원가입 되어 있는 사용자는 메인페이지로 이동한다.
    회원가입이 되어 있지 않은 사용자는 회원가입 페이지로 이동한다

    ex) 회원가입 후 제출 버튼을 클릭했을 때
    로그인 페이지에서 로그인을 완료한 뒤, 처음 진입했던 페이지로 돌아간다.
    회원가입을 하고 정보를 담아 로그인 페이지로 이동한다.

    ex) 결제하기 버튼
    쇼핑몰에서 결제하기 버튼을 누르고, 모든 결제가 완료된 후 페이지를 이동시킨다.
    쇼핑몰에서 장바구니에 담기를 눌렀을때 현재 정보를 담고 장바구니 페이지로 이동시킨다.

     

     

     

     

     

    사용예시

    import { useNavigate } from "react-router-dom";

     

    최상단에 import로 useNavigate 훅을 불러온다.

     

     

     

     

    const navigate = useNavigate();

     

    그리고 컴포넌트에 useNavigate훅을 불러온다.

     

     

     

     

      <button onClick={onClickDeleteButton}>삭제</button>
          <button
            onClick={() => {
              navigate(-1);
            }}
          >
            뒤로가기
      </button>

     

    사용하고자 하는 곳에 `navigate("링크URL");` 을 넣어준다.

     

     

     

     

     

    함수 안에서 사용할 때 예시

      const onClickDeleteButton = () => {
        const newExpenses = expenses.filter((item) => item.id !== id);
        setExpenses(newExpenses);
        navigate("/");
      };

     

    삭제 버튼을 예시로 들어보자.

    사용자가 삭제 버튼을 클릭했을 때, 함수가 실행이 되면서 실행로직이 진행 된 후

    navigate로 메인페이지로 이동시킨다.

     

     

     

     

    한번 더 나아가보자!

    두 번째 인자로 이동시킬 페이지에 함께 보낼 데이터를 지정할 수 있다.

    const Home = () => {
      navigate("/main", {
        state: {
          userId: user.id
        }
      });
    };

     

    이렇게 데이터를 보낼 때, 두번째 인자는 `state` 속성으로 보내야 한다.

     

     

     

     

     

    또한 두번째 인자로 state 뿐만 아니라, `replace`속성도 보낼 수 있다!

    import { useNavigate } from 'react-router-dom'; 
    
    const navigate = useNavigate();
    
    const Home = () => {
      navigate("/main", {replace: true});
    };

     

    기본값은 `false`로 되어있고, `true`로 되어있으면 페이지가 이동한 뒤,

    뒤로가기를 하더라도 방금 페이지로 돌아올 수 없고 `root`로 돌아오게 된다.

    `false`는 뒤로가기가 가능하다.

     

     

     


     

     

    Link태그와 useNavigate의 차이점이 뭔데?

    어떠한 조건이 있냐, 없냐에 따라서 중요한 차이점이 있다.

    `Link`태그는 단순히 조건 없이 누르면 해당 페이지로 이동하는 것이고,

    `useNavigate` 훅은 정보를 가지고 어떤 조건이 포함되어 있을 때 사용한다.

     

    회원가입창을 예시로 들어보면 회원가입하기 버튼은 어떠한 조건이 없으므로 `Link`태그를 사용하는 것이 적합하다.

    또는 회원가입폼을 작성한 뒤, 사용하는 `회원가입 완료` 버튼은 조건의 정보를 가지고 있으니 `useNavigate` 훅을 사용한다!

     

     

     

     

    댓글