React/Router
[Router] Link와 Outlet
zenghyun
2023. 6. 9. 21:15
오늘은 Link와 Outlet을 이용하여 간단한 다중 페이지를 만들어보겠습니다.
📌 App.js
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | import { createBrowserRouter, RouterProvider } from "react-router-dom"; import HomePage from "./pages/Home"; import ProductsPage from "./pages/Products"; import RootLayout from "./pages/Root"; const router = createBrowserRouter([ { path: "/", element: <RootLayout />, children: [ { path: "/", element: <HomePage /> }, { path: "/products", element: <ProductsPage /> }, ], }, ]); function App() { return <RouterProvider router={router} />; } export default App; | cs |
RootLayout이라는 요소에 MainNavigation이라는 요소와 children으로 지정된 나머지 요소들을 렌더링 하는 과정입니다.
📌 Root.js
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | import { Outlet } from "react-router-dom"; // Outlet : 자녀 라우트 요소들이 렌더링되어야 할 장소를 표시하는 역할을 한다. import MainNavigation from "../components/MainNavigation"; import classes from './Root.module.css' function RootLayout() { return ( <> <MainNavigation /> <main className={classes.content}> <Outlet /> </main> </> ); } export default RootLayout; | cs |
Outlet: 자녀 라우트 요소들이 렌더링되어야 할 장소를 표시하는 역할을 합니다.
📌 MainNavigation.js
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | import { Link } from "react-router-dom"; import classes from "./MainNavigation.module.css"; function MainNavigation() { return ( <header className={classes.header}> <nav> <ul className={classes.list}> <li> <Link to="/">Home</Link> </li> <li> <Link to="/products">Products</Link> </li> </ul> </nav> </header> ); } export default MainNavigation; | cs |
MainNavigation에서는 Link를 통해 원하는 페이지로 이동합니다.
a 태그와 다르게 Link는 to에 주소를 지정합니다.
📌 Home.js
1 2 3 4 5 6 7 8 9 10 | const HomePage = () => { return ( <> <h1>My Home Page</h1> </> ); }; export default HomePage; | cs |
📌 Products.js
1 2 3 4 5 | function ProductsPage() { return <h1>The Products Page</h1>; } export default ProductsPage; | cs |