dukDukz
[React Router v6] createBrowserRouter 레이아웃 여러개 본문
createBrowserRouter
-> v6.4 부터 사용할 수 있다.
https://reactrouter.com/en/main/routers/picking-a-router#using-v64-data-apis
"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 |