dukDukz
[React Router v6] createBrowserRouter 레이아웃 여러개 본문
createBrowserRouter
-> v6.4 부터 사용할 수 있다.
https://reactrouter.com/en/main/routers/picking-a-router#using-v64-data-apis
Picking a Router v6.10.0
Picking a Router While your app will only use a single router, several routers are available depending on the environment your app is running in. This document should help you figure out which one to use. Using v6.4 Data APIs In v6.4, new routers were intr
reactrouter.com
"react-router-dom": "^6.10.0",
프로젝트에서 사용하는 버전
프로젝트 최상단 파일
index.tsx
OR
main.tsx
import { RouterProvider } from 'react-router-dom';
import routes from './routes';
const router = createBrowserRouter(routes);
root.render(
<React.StrictMode>
<RouterProvider router={router} />
</React.StrictMode>,
);
<BrowserRoute>로 감싸지 않고 최상단 파일에서 <RouterProvider> 를 사용한다.
RouterRrovider에는 router={} props를 필수로 넣어야 한다.
routes.ts
const routes = [
{
element: <Layout />,
errorElement: <NotFound />,
children: [
{ path: '/', element: <MainPage /> },
{ path: '/data', element: <DataPage /> },
{ path: '/platform', element: <PlatformIntroPage /> },
],
},
];
export default routes;
기본적으로 이렇게 사용할 수 있다.
이렇게 routes 파일을 따로 빼준 이유는 routes.test.ts 파일에서 테스트 코드를 작성할때 활용해야하기 때문
createBrowserRouter 으로 레이아웃 여러개 사용하기
페이지별로 레이아웃이 달랐으면해서 이렇게 분리했다.
const routes = [
{
path: '/',
element: <Layout />,
errorElement: <NotFound />,
children: [
{ index: true, element: <MainPage /> },
{ path: '/data', element: <DataPage /> },
{ path: '/platform', element: <PlatformIntroPage /> },
],
},
{
path: '/login',
element: <NoLayout />,
errorElement: <NotFound />,
children: [
{ index: true, element: <LoginPage /> },
],
},
];
export default routes;
간단히 하는 법
더보기
const routes = [
{
path: '/',
element: <Layout />,
errorElement: <NotFound />,
children: [
{ index: true, element: <MainPage /> },
{ path: '/data', element: <DataPage /> },
{ path: '/platform', element: <PlatformIntroPage /> },
],
},
{
path: '/login',
element: <LoginPage />,
},
];
export default routes;
참고 블로그
'웹 개발 > React' 카테고리의 다른 글
React) vite + react (js) + eslint (0) | 2023.07.04 |
---|---|
전 후 값으로 변경하는 버튼 (배열 안에서 전 후 값으로 이동하기) (0) | 2023.05.31 |
[error] @parcel/transformer-js: Browser scripts cannot have imports or exports. (0) | 2023.03.02 |
[React] (useRef 활용) 함수를 특정 페이지에서만 동작하지 않게 하기 (0) | 2023.02.21 |
[React] Router replace to (0) | 2022.12.08 |