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์†์„ฑ์œผ๋กœ ์ค‘์ฒฉํ•œ๋‹ค.
๊ทธ๋ฆฌ๊ณ  ๋ถ€๋ชจ ์ปดํฌ๋„ŒํŠธ์— ๊ฐ€์„œ ๊ผญ ์„ ์ ์šฉํ•ด์ค˜์•ผ ํ•œ๋‹ค. ๊ทธ๋ž˜์•ผ Outlet ์œ„์น˜์— 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}>
		</>
	)
}




Categories:

Updated:

Leave a comment