React Router
npm i react-router
๋ก ์ค์น
src/routes/index.tsx
src/routes/pages/About.tsx
src/routes/pages/Home.tsx
src/routes/index.tsx
import {createBrowserRouter, RouterProvider} from "react-router";
const router = createBrowserRouter([
{
path: "/",
element: <Home />,
},
{
path: "/about",
element: <About />,
},
]);
export default function Router() {
return (
<>
<RouterProvider router={router}>
</>
)
}
{
path: "/",
element: <Home />,
},
์ด๊ฒ ๋ผ์ฐํธ ๊ฐ์ฒด
๋ผ์ฐํธ ๊ฐ์ฒด๋ค์ด ๋ฌถ์ฌ์ ์ ์ฒด์ ์ธ ์ญํ ์ ํ๊ฒ ํด์ฃผ๋ router ๋ณ์๋ฅผ ๋ผ์ฐํฐ ์ธ์คํด์ค ๊ฐ์ฒด
๋ผ๊ณ ํ๋ค.
์ปดํฌ๋ํธ๋ฅผ ์ ๋ฌํ ๋๋ element ๋์ ์ Component: Home
, ์ด๋ ๊ฒ ์ ๋ฌํ ์๋ ์๋ค.
Home์ auto import ํ์ํจ.
element๋ jsx๋ ์ ๋ฌํ ์ ์๋ค.
์ค์ฒฉ ๋ผ์ฐํธ
์ค์ฒฉ ์ํค๊ณ ์ถ์ ๋๋ children์์ฑ์ผ๋ก ์ค์ฒฉํ๋ค.
๊ทธ๋ฆฌ๊ณ ๋ถ๋ชจ ์ปดํฌ๋ํธ์ ๊ฐ์ ๊ผญ
src/routes/index.tsx
const router = createBrowserRouter([
{
path: "/",
element: <Home />,
},
{
path: "/dashboard",
element: <Dashboard />,
children: [
{
path: "", // index: true ๋ผ๊ณ ์ ์ด๋ ๋๊ฐ์. (์ธ๋ฑ์ค ๋ผ์ฐํธ)
element: <DashBoardHome />
}
]
},
]);
src/routes/pages/dashboard/Dashboard.tsx
import {Outlet} from "react-router";
export default function Dashboard () {
return (
<>
<h1>Dashboard</h1>
<Outlet />
</>
)
}
์ธ๋ฑ์ค ๋ผ์ฐํธ๋ children์ ๊ฐ์ง ์ ์๋๋ฐ ์ธ๋ฑ์ค ๋ผ์ฐํธ๊ฐ ์๋๋ฉด ๋ children ์ค์ฒฉ์ด ๊ฐ๋ฅํ๋ค.
children์์ฑ์ผ๋ก ์ค์ฒฉ๋ ๋ผ์ฐํธ์ path์๋ /
๋ฅผ ๋ถ์ด์ง ์๋๋ค.
App ์ปดํฌ๋ํธ ์ง์ฐ๊ธฐ
main.tsx
import { StrictMode } from "react";
import { createRoot } from "react-dom/client";
import "./css/index.css";
import Router from "./routes";
createRoot(document.getElementById("root")!).render(
<StrictMode>
<Router />
</StrictMode>
);
App ์ปดํฌ๋ํธ ์ง์ฐ์ง ์๊ธฐ
main.tsx
import { StrictMode } from "react";
import { createRoot } from "react-dom/client";
import "./css/index.css";
import App from "./App.tsx";
createRoot(document.getElementById("root")!).render(
<StrictMode>
<App />
</StrictMode>
);
App.tsx
import Router from "./routes";
export default function App() {
return (
<>
<Router />
</>
);
}
layout ๋ผ์ฐํธ
src/routes/pages/layouts/RootLayout.tsx
import {Outlet} from "react-router";
export default function RootLayout() {
return (
<>
<header></header>
<Outlet />
<footer></footer>
</>
)
}
src/routes/index.tsx
import {createBrowserRouter, RouterProvider} from "react-router";
const router = createBrowserRouter([
{
element: <RootLayout />,
children: [
{
path: "/",
element: <Home />,
},
{
path: "/about",
element: <About />,
},
]
}
]);
export default function Router() {
return (
<>
<RouterProvider router={router}>
</>
)
}
๋ ์ด์์์ ์ผ๋ง๋ ์ง ์ค์ฒฉ ๊ฐ๋ฅ.
๋ผ์ฐํธ prefix
element๋ ์์ด ๊ณตํต์ ์ธ๊ทธ๋จผํธ๋ง ์ถ๊ฐํ๊ณ ์ถ์ ๋
import {createBrowserRouter, RouterProvider} from "react-router";
const router = createBrowserRouter([
{
element: <RootLayout />,
children: [
{
path: "/",
element: <Home />,
},
{
path: "/about",
element: <About />,
},
{
path: "/group",
children: [
{
path: "dashboard", // <- /์์ด์ผ ๋จ
element: <Dashboard />,
children: [
{
path: "",
element: <DashBoardHome />
}
]
},
]
}
]
}
]);
export default function Router() {
return (
<>
<RouterProvider router={router}>
</>
)
}
Leave a comment