
velopert님의 영상을 토대로 정리한 블로그 글입니다.
동영상으로 보실분들은 velopert님의 유튜브 영상을 시청해주세요!
React Router v6가 정식으로 릴리즈 되었다. 공식문서
그 동안 사용했던 React Router의 문법이 조금 바뀌었는데
v5문법에 많이 익숙해서 그런지 v6문법과 v5문법이 많이 헷갈린다. ㅎㅎ..
그럼 어떤점이 바뀌었는지 한번 보자
Routes는 기존 Switch 처럼 경로를 순서를 기준으로 선택하는 것이 아닌, 가장 일치하는 라우트를 기반으로 선택하게 된다.Routes로 기존 Switch의 기능을 대체 가능기존 코드
<Switch>
<Route path="/" ..... />
</Switch>
v6 코드
<Routes>
<Route path="/" ..... />
</Routes>
기존 코드
const history = useHistory();
history.push('/');
history.goback();
history.go(-2);
history.push(`/user/${user._id}`);
v6 코드
const navigate = useNavigate();
navigate('/');
navigate(-1);
navigate(-2);
navigate(`/user/${user._id}`);
기존 코드
const match = useRouteMatch();
console.log(match); // { path: '/', url: '/', isExact: true, params: {} }
<Link to={match.url} />; // 현재 url 로 이동
<Link to={`${match.url}/about`}>; // 현재 url에 /about을 붙인곳으로 이동
<Route path={match.patch} exact />
<Route path={`${match.patch}/about`} />
v6 코드
<Link to="" />; // 이렇게 입력시 현재 페이지로 이동
<Link to="about">; // 이렇게 입력시 현재 url에 /about을 붙인 곳으로 이동 *단 about앞에 /about을 붙이게되면 진짜 /about으로 이동되니 현재 기준으로 하려면 앞에 슬래쉬를 빼줘야함
<Route path="" exact />
<Route path="about" />
기존 코드
<Route path="/" exact component={HomePage} />
<Route path="/login" exact>
<LoginPage />
</Route>
v6 코드
<Route path="/" exact element={<HomePage />} />
<Route path="/login" exact element={<LoginPage />} />
기존 코드
<Route path="/" exact component={HomePage} />
<Route path="/login" exact>
<LoginPage />
</Route>
v6 코드
<Routes>
<Route path="/" exact element={<HomePage />} />
<Route path="/login" exact element={<LoginPage />} />
</Routes>
기존 코드
<Route path="/login" exact component={UsersPage} />
v6 코드
<Route path="/login" element={<UsersPage />} />
기존 코드
<Route path="/users/:username" component={UsersPage} />
v6 코드
<Route path="/users/:username/*" element={<UsersPage />} />
기존 코드
<Route path="/optional/:value?" component={Optional} />
v6 코드
<Route path="/optional/:value?" element={<Optional />} />
<Route path="/optional" element={<Optional />} />
기존 코드
App.js
<Route path="/users/:username" component={UsersPage} />
UserPage.js
<Route path="/users/:username" component={UserMain} />
<Route path="/users/:username/about" component={About} />
v6 코드
App.js
<Route path="/users/:username/*" element={<UsersPage />}>
<Route path="" element={<UserMain />} />
<Route path="about" element={<About />} />
</Route>
UserPage.js
<Outlet />
기존 코드
<NavLink to="/messages" style={{ color: "blue"}} activeStyle={{ color: "green"}}>
Messages
</NavLink>
<NavLink to="/messages" className="nav-link" activeClassName="activated">
Messages
</NavLink>
v6 코드
<NavLink to="/messages" style={({ isActive }) => ({ color: isActive ? 'green' : 'blue' })}>
Messages
</NavLink>
<NavLink to="/messages" className={({ isActive }) => "nav-link" + (isActive ? " activated" : "") }>
Messages
</NavLink>
정리 감사드립니다!