일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- React JS
- design pattern
- useEffect
- 리액트 훅
- 자바스크립트
- 프로그래머스 완전탐색
- websocket
- 장고
- 프로그래밍 언어론
- useState
- 디자인 패턴
- 리액트
- JavaScript
- 컴퓨터 네트워크
- 자바 공부
- Java
- 백준
- 프로그래머스 자바
- 프로그래머스
- 자바
- 코딩테스트 고득점 Kit
- codesandbox
- react firebase
- 데이터모델링과마이닝
- react hook
- 코딩테스트 고득점 Kit 완전탐색
- vanillaJS
- NextJS
- 코틀린
- react
Archives
- Today
- Total
기록하는 개발자
[React] react-router-dom v6 변경사항 살펴 보기 본문
728x90
1. <Switch> → <Routes>
- Wrapper 명칭이 <Route>의 element들을 포함하는 <Routes>로 변경되었다.
- exact 옵션이 삭제되어 exact가 default로 적용된다.
→ `exact`옵션을 없애고 싶다면 path 끝에 *을 붙여준다. (예시로 확인)
- path에 하위경로(":id")와 상대경로(".", ".." )로의 지정이 가능하다.
2. 중첩 라우팅의 간편화
// 기존 v5의 중첩 라우팅
import { BrowserRouter, Switch, Route, Link, useRouteMatch } from 'react-router-dom';
function App() {
return (
<BrowserRouter>
<Switch>
<Route path="/login" component={Login} />
</Switch>
</BrowserRouter>
);
}
function Login() {
const { path } = useRouteMatch();
return (
<div>
<Switch>
<Route path={`${path}/signup`}>
<SignUp />
</Route>
</Switch>
</div>
);
}
// 변경된 v6의 중첩 라우팅
import { BrowserRouter, Routes, Route, Outlet } from 'react-router-dom';
function App() {
return (
<BrowserRouter>
<Routes>
<Route path='login' element={<Login />} >
<Route path='signup' element={<SignUp />} />
</Route>
</Routes>
</BrowserRouter>
);
}
function Login() {
return (
<>
<Outlet />
</>
)
}
- page 단에서 모든 경로를 중첩하고, 중첩되는 randering elements는 <Outlet> component를 사용하여 이중작업을 방지한다.
- 최상단의 <Routes> 내에서 모든 라우팅 구조를 중첩할 수 있기 때문에 매우 직관적이다는 장점이 있다.
3. useHistory → useNavigate
- useHistory Hooks가 useNavigate로 대체되었다.
4. useRoutes
기존의 react-router-config가 useRoutes Hooks로 대체되어 패키지 설치가 불필요해졌다.
<라우팅 예시>
// v5
import { BrowserRouter, Route, Switch } from "react-router-dom";
import Main from "./page/Main";
import Login from "./page/Login";
import SignUp from "./page/SignUp";
function App() {
return (
<BrowserRouter>
<Switch>
<Route path="/" component={() => <Main />} />
<Route exact path="/login" component={() => <Login />} />
<Route exact path="/signup" component={() => <SignUp />} />
</Switch>
</BrowserRouter>
);
}
export default App;
// v6로 변경된 후
import React from "react";
import { BrowserRouter, Route, Routes } from "react-router-dom";
import { Main, Login, SignUp } from "../pages";
import { Navigation } from "../component";
const Router = () => {
return (
<BrowserRouter>
<Navigation />
<Routes>
<Route path="/" element={<Main />} />
<Route path="/login/*" element={<Login />} />
<Route path="/signup/*" element={<SignUp />} />
</Routes>
</BrowserRouter>
);
};
export default Router;
React Router 공식문서 https://reactrouter.com/docs/en/v6/upgrading/v5
728x90