react-router-dom 모듈을 설치하면 아래와 같은 기능을 이용 할 수 있다. ㆍ라우터 관련 컴포넌트 <BrowserRouter/> , <Routes/> , <Route/> ㆍ페이지 이동 관련 컴포넌트 <Link/> , <Navigate/> ㆍUrl관련 및 파라미터를 정보다루기 위한 Hook {useParam} , {useLocation} , {useSearchParams} ㆍ페이지 이동 관련 Hook {useNavigate} , {NavLink}
ㆍ경로를 라우팅하기위한 3가지 컴포넌트 <BrowserRouter/> , <Routes/> , <Route>
반드시<BrowserRouter> 안에, <Routes> 를 작성하고 <Routes> 안에, <Route> 를 항목 하나씩 작성하며, <Link to=”/Home”>홈</Link> 태그 컴포넌트 또한 <BrowserRouter> 안에 작성하여야 한다
import { Link } from ‘react-router-dom’ <BrowserRouter/> 컴포넌트 내부에 작성해야하며, <Link to=”path”> 의 path 는 라우팅 경로를 작성한다. 예를들어 <Link to=”Home”>홈</Link> 은 http://localhost/Home 을 가리키며, <Link to=”http://www.naver.com”>네이버</Link>는 http://localhost/http://www.naver.com 로 라우팅한다. 그냥 단순 링크가 아님을명심 하자. Link 는 라우팅을 위한 Link 이다.
* <Link> 의 to 속성과 Route 의 path 속성을 매핑시킨다. <Link to=”Home“>링크</Link> 는 <Route path=”Home” element={<MyHome></MyHome>}/>
<Navigate to=”” replace={true:false}></Navigate>
import {Navigate} from ‘react-router-dom’ <Navigate> ,컴포넌트는 , 이벤트 발생시, 이동하지않고 ,바로 redirect 시킬때 사용한다. 페이지에서 클릭 또는 처리 후 이동하기 보다 asp 의 Response.redirct 처럼 강제적으로 페이지를 이동시킬때
예를들어,
App.js import React from ‘react’ import { Navigate} from ‘react-router-dom’
function App(){ // 만약 로그인 되어있지않다면 로그인 페이지로 리다이렉트 replace={true} 이기때문에 뒤로가기 history 없음 if (!isLogin) return <Navigate to=”/Login” replace={true}></Navigate>
return <div> my App </div> }
export default App;
useNavigate 훅(HOOK) 사용하기 const useNavi = useNavigate();
javascript 의 location.href=”” 와 같이 페이지를 다른곳으로 이동 시킬수 있다 단, url 이 아닌, 라우터 경로로 보내므로 라우터<Routes> 의 path 를 지정해준다.
useNavi(‘/Home’) //
http://localhost/Home 으로 이동 – 뒤로가기가능 useNavi(‘/Home’ , {replace : true}) // http://localhost/Home 으로 이동 뒤로가기 불가능 (location.replace 효과)
App.js
import {useNavigate} from ‘react-router-dom’
function App(){
const usenavigate = useNavigate();
function goUrl(u)
{
usenavigate(u) usenavigate(u , {replace:true}) ; // replace:true 일 경우 history 남기지않음 뒤로가기안됨
// url 파라미터는 path 에 지정된 갯수된 만큼의 호출에서만 작동하므로, 각각 지정해줘야 모두 작동함 <Routepath=”/Home/:username” element={<Home></Home>}/> <Routepath=”/Home/:username/:userage” element={<Home></Home>}/>