티스토리 뷰
<BrowserRouter>
<Routes>
<Route path='/' element={<BirthdayCake />} />
<Route path='/' element={<Save />} />
<Route path='/bdaycake' element={<BirthdayCake />} />
<Route path='/todolist' element={<TodoList />} />
<Route path='/jmc' element={<JMC />} />
</Routes>
</BrowserRouter>
구질구질한 라우터에 질린 사람 헤쳐 모여~
라우터를 저렇게 만드는 방법밖에 몰랐는데 새로운 방법을 알게 되었다.
바로 createBrowserRouter 사용하기! 😀👍
createBrowserRouter
createBrowserRouter를 사용하면 라우터를 생성할 수 있다. 라우팅 정보를 담은 배열을 인자로 넣어주면 된다. 그리고 path에 경로를 설정하고 해당 경로에서 보여줄 컴포넌트를 element에 넣는다. 만약 한번 더 들어가는 경로라면(예: /board/all 과 /board/notice) children에 넣으면 된다. 경로가 계속 타고 간다면 같은 방법으로 타고 갈 수 있도록 정해주면 된다.
import { createBrowserRouter } from 'react-router-dom';
const Router = createBrowserRouter([
{
path: '/',
element: <Index />,
children: [
{ path: 'save', element: <Save /> }, // /save
{ path: 'change-bg', element: <ChangeBgColor /> }, // /change-bg
{
path: 'board',
element: <Board />, // /board
children: [
{
path: 'all',
element: <AllBoard />, // /board/all
},
{
path: 'notice',
element: <HappyBoard />, // /board/notice
},
{
path: 'notice',
element: <Notice />, // /board/notice
},
],
},
],
},
]);
export default Router;
RouterProvider
그리고 만들어 둔 Router를 RouterProvider에 전달해주면 된다.
import React from 'react';
import ReactDOM from 'react-dom/client';
import { RouterProvider } from 'react-router-dom';
import Router from './Router';
ReactDOM.createRoot(document.getElementById('root') as HTMLElement).render(
<React.StrictMode>
<RouterProvider router={Router} />
</React.StrictMode>
);
Outlet
하지만 여기서 중요한 점은 Outlet을 사용해야 한다는 점이다! 컴포넌트 안에서 Outlet을 이용해서 Outlet자리에 자식 컴포넌트를 보여줄 것이기 때문이다. Outlet이 바꿔 끼워가며 보여줄 컴포넌트 자리라고 보면 된다. 마치 포토존 프레임 판넬처럼...!
import { Outlet } from 'react-router-dom';
import styled from 'styled-components';
const Home = () => {
return (
<Container>
<nav className='nav-menu'>
<ul>
<li>
<a href='/bdaycake'>Birthday Cake</a>
</li>
<li>
<a href='/board/all'>Board</a>
</li>
<li>
<a href='/save'>save</a>
</li>
<li>
<a href='/todolist'>todolist</a>
</li>
</ul>
</nav>
<div>
<Outlet /> // 이 자리에 컴포넌트들이 들어가면서 보여진다.
</div>
</Container>
);
};
export default Home;
728x90
'TIL' 카테고리의 다른 글
TIL 230523 순환 참조(Circular Dependency) (0) | 2023.05.23 |
---|---|
TIL 230425 기초 부족.. 정처기 공부가 답이었구나~ (0) | 2023.04.25 |
TIL 230405 string[]과 [string] (0) | 2023.04.05 |
TIL 230329 Vue.js와 Vuex에 대해 공부하고 알게 된 것 (0) | 2023.03.30 |
TIL 230328 useQuery와 useMutation (0) | 2023.03.29 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 드림코딩
- 리액트
- TS
- 저스트코드
- 파이썬
- CSS
- 구름에듀
- 코딩앙마
- map
- 깃
- git
- vscode
- React
- vue
- Typescript
- 비주얼스튜디오코드
- 김버그
- Python
- js
- 타입스크립트
- 스파르타코딩클럽
- html
- javascript
- 자바스크립트
- 제로초
- 회고
- Til
- 제이쿼리
- scss
- 코드잇
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함