React

useNavigate, Navigate

sdafdq 2023. 11. 30. 16:07

이거는 네비게이션, 정확히는 경로를 알려준다기 보다는 경로까지 가게 해주는 훅임.

 

import React from 'react'
import { Outlet, useNavigate } from 'react-router'

const Layout = () => {
  const navigate = useNavigate();
  const goBack = ()=>{
    navigate(-1);
  }

  const goArticles = ()=>{
    navigate('/articles', {replace:true});
  }

  return (
    <div>
      <header style={{backgroundColor:'lightgray', padding:16, fontSize:24}}>
        <button onClick={goBack}>뒤로가기</button>
        <button onClick={goArticles}>Articles로 가기</button>
      </header>

      <main>
        <Outlet/>
      </main>
    </div>
  )
}

export default Layout

그냥 훅 가져오고,

저렇게 하면 콜백함수가 들어가나 봄.

navigate(-1) 하면 바로 전, 뒤로 가기임.

 

navigate('경로') 해서 바로 보낼 수도 있음.

이 때, replace라고, 완전히 새로 놓는다는 뜻 인거 같음.

그러니까, 페이지들 돌아다닐 수록 그 로그가 남는데,

그 로그를 (애초에 이게 길 알려주고 경로 아는 네비게이션이니까) 완전히 새로 대체시키는, 네비게이션 자체를 새로 놓는 그런 느낌임.

 

그래서 그냥 뒤로가기 하면 / 로 가게끔 하는 거 같음. 그 전꺼 다 지우고.

 

근데 이게 아예 컴포넌트 그 자체로도 있음.

import React from 'react'
import { Navigate } from 'react-router';

const MyPage = () => {
  const isLoggedIn = false;

  if(!isLoggedIn) {
    return <Navigate to='/login' replace={true}></Navigate>
  }
  
  return (
    <div>MyPage page...</div>
  )
}

export default MyPage

그냥 Navigate 컴포넌트 가져오면 됨.

 

보면 사용법도 똑같음.

to='보낼경로'

하면 되고,

replace도 네비게이션을 새로 교체할 건지, 즉 기존에 로그를 가지고 있던 네비게이션을 새로 교체할 건지.

 

그냥 return 컴포넌트 저렇게 하면 실제로 그냥 바로 가짐. html 요소가 아니라 react-router에서 가져왔듯이 리액트 라우터의 기능임.

 

 

'React' 카테고리의 다른 글

타입 스크립트 리액트  (0) 2023.11.30
NavLink, Link  (0) 2023.11.30
중첩 라우팅  (0) 2023.11.30
라우터 경로변수  (0) 2023.11.30
리액트 최적화  (0) 2023.11.28