const routes = [
{
element: <Layout />,
childern: [
{ path: '/', element: <HomePage /> },
{ path: '/about', element: <AboutPage /> }, // ✅ childern안에 있는 것들은 전부 Layout으로 그려준다.
],
},
];
const router = createBrowserRouter(routes); // ✅ App 컴포넌트를 거치지 않고 바로 브라우저 라우터 만들어서 사용할 수 있도록 한다.
root.render(
<React.StrictMode>
<RouterProvider router={router} /> // ✅ props으로 router 전달하기
</React.StrictMode>
);
<Layout> 컴포넌트는 어떻게 생겨야할까?
import { Outlet } from 'react-router-dom';
export default function Layout() {
return (
<div>
<Header />
<Oulet /> // 🚧 URL에 맞는 컴포넌트를 렌더링시켜주는 역할을 한다.
<Footer>
</div>
)
}
리액트에서 라우터를 분리하는 이유가 뭘까?
: 코드의 구성과 관심사의 분리가 잘 이루어진다. 라우터는 네비게이션 로직을 처리하여 현재 URL에 기반하여 어떤 컴포넌트를 렌더링해야하는지 결정한다. 이러한 로직을 모듈이나 파일로 분리하면 다른 부분에 영향을 주지 않고 라우팅 코드를 유지하고 업데이트하기가 더 쉬워진다.
\
🫥 각 파일을 모듈로 분리했을 때 코드를 한 눈에 보기
// App.tsx
import { createBrowserRouter, RouterProvider } from 'react-router-dom';
import routes from './routes';
const router = createBrowserRouter(routes);
export default function App() {
return (
<RouterProvider router={router}>
)
}