v6
로 버전업이 되면서 번들 크기가 이전 버전보다 약 70% 더 작아짐React-router, React-router-dom, React-router-native
- React-router: 기본적인 React의 Router 관련 컴포넌트들을 포함
- React-router-dom: React-router의 컴포넌트들을 베이스로 dom(Web)에 집중된 라이브러리
<BrowserRouter>
,<Link>
컴포넌트 등을 추가적으로 포함한다.- React-router-native: React-router-dom과 마찬가지로 native(app)에 집중된 컴포넌트 포함
- waht's the diff between react-router-dom & react-router?
$ npm i react-router-dom
$ yarn add react-router-dom
import React from 'react';
import { BrowserRouter } from 'react-router-dom
ReactDOM.render (
<BrwoserRouter>
<App />
</BrowserRouter>,
document.getElementById('root')
);
v6
으로 넘어가면서 더이상 exact
를 사용하지 않아도 됨<Route path="/" element={<Home />} />
v6
에 새롭게 도입된 컴포넌트, 기존의 Switch
컴포넌트 대신 사용<Router>
<Header />
<Routes>
<Route path="/" element={<Home />} />
<Route path="about" element={<About />} />
</Routes>
<Footer />
</Router>
<Route>
컴포넌트와 마찬가지로 부모 경로의 상대적인 경로로 지정 <a></a>
태그처럼 link
를 생성하기 위한 컴포넌트to
props를 활용하여 연결하려는 컴포넌트의 url을 작성state prop
을 사용하여 <Link>
컴포넌트를 통해 새 경로로 데이터를 전달할 수 있다.useLocation Hook
을 사용하여 state prop
에 접근할 수 있다.<nav>
<Link to="/">Home</Link>
<Link to="/about" state={{ from: "category" }}>About</Link>
</nav>
URL parameters
를 사용하여 URL 부분에 대한 자리 표시자를 선언할 수 있다.path
prop에서 :
를 사용하여 URL의 특정 부분이 매개변수임을 React router에 알림<Route path="/post/:postId" element={<Post/>} />
*
를 기입<Route path="*" element={<NotFound />} />
Navigate
컴포넌트 제공import { Navigate } from 'react-router-dom`;
const Redirect = () => {
return <Navigate to="/home" replace />;
}
// 사용 예제
import React from "react";
import { Outlet, useLocation, Navigate } from "react-router-dom";
const WithAuth = () => {
const location = useLocation();
return isLoggedIn ? (
<Outlet />
) : (
<Navigate to="/login" state={{ from: location }} />
);
};
export default WithAuth;
react-router-dom v6 이전
에 사용된 useHistory hook
은 push(라우터 이동)
, goBack(이전 페이지 이동)
등 라우팅에 관한 다양한 메소드들이 포함된 객체를 반환하는 훅react-router dom v6
부터 useHistory
를 대체하는 useNavigate
라는 새로욱 훅을 제공useNavigate
에서 제공하는 고유 기능은 navigate()
에 -1
, 1
을 전달하면 이전 페이지
또는 다음 페이지
로 이동import { useNavigate } from 'react-router-dom';
const GoAboutButton = () => {
const navigate = useNavigate();
function handleClick() {
navigate('/about');
// navigate(-1); 이전 페이지 이동
// navigate(1); 다음 페이지 이동
}
return (
<button type="button" onClick={handleclick}>go to the about page </button>
)
}
v6
에 추가된 훅으로 객체 기반으로 경로를 정의vue
의 라우팅방식처럼 프로그래밍 방식으로 경로를 구축할수 있음import { useRoutes } from 'react-router-dom';
const Example = () => {
const routes = useRoutes([
{ path: "/", element: <Home /> },
{ path: "/about", element: <About /> },
// ...
]);
return routes;
};