그럼에도 불구하고

👨‍💻

[Router] RouterProvider와 CreateBrowserRouter 본문

React/Router

[Router] RouterProvider와 CreateBrowserRouter

zenghyun 2023. 6. 9. 20:19

React에서 RouterProvider와 CreateBrowserRouter를 이용하여

다중 페이지를 구현하는 법에 대해 알아보겠습니다.

 

 

[ 기존 방식 ] 

 

1
2
3
4
5
6
7
8
import { BrowserRouter } from 'react-router-dom'
 
const root = ReactDOM.createRoot(document.getElementById('root'))
root.render(
  <BrowserRouter> // 최상단 root에서 BrowserRouter로 감싸기
      <App /> 
  </BrowserRouter>
)
cs

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
import { Route, Routes } from 'react-router-dom'
 
const App = () => {
  return (
    <Routes>
      <Route path='/' element={<Layout />> // outlet을 이용한 중첩라우팅
        <Route index element={<Main />/> 
        <Route path='/pageA' element={<PageA />/>
        <Route path='/pageB' element={<PageB />/>
        <Route path='/pageC' element={<PageC />/>
      </Route>
      </Routes>
  )
}
Colored by Color Scripter
cs
 
cs

 

[  React Router v6.4 이후 추가된 방식  ]

 

📌 RouterInfo.js 

 

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
32
33
34
import Layout from '../Layout'
import Main from '../pages/Main';
import PageA from '../pages/PageA';
import PageB from '../pages/PageB';
import PageC from '../pages/PageC';
 
export const RouterInfo = [
  {
    path: "/",
    element: <Layout />,
    children: [
      {
        index: true,
        element: <Main />,
        label: 'main'
      },
      {
        path: "/pageA",
        element: <PageA />,
        label: 'A'
      },
      {
        path: "/pageB",
        element: <PageB />,
        label: 'B'
      },
      {
        path: "/pageC",
        element: <PageC />,
        label: 'C'
      },
    ]
  },
]
cs

 

📌 App.js

 

1
2
3
4
5
6
7
8
9
10
11
12
13
import { createBrowserRouter, RouterProvider, } from 'react-router-dom';
import { RouterInfo } from './util/router';
 
const RouterObject = createBrowserRouter(RouterInfo) 
//CreateBrowserRouter로 경로 지정
 
const root = ReactDOM.createRoot(document.getElementById('root'));
root.render(
  <React.StrictMode>
    <RouterProvider router={RouterObject} />
  </React.StrictMode>
);
 
cs

 

기존의 방식처럼 BrowserRouter로 감싸지 않고 RouterProvider를 이용하여 구성요소들을 전달하고 활성화합니다.

 

 

ref: https://reactrouter.com/en/main/start/overview

Comments