그럼에도 불구하고

👨‍💻

[Router] Link와 Outlet 본문

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
Comments