Kimsoraโœจ
article thumbnail
320x100
๋ฐ˜์‘ํ˜•

๐Ÿ“ŒcreateBrowserRouter

createBrowserRouter()์— ๋ผ์šฐํŒ… ํ•  path์™€ element๋กœ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค. children ์†์„ฑ์œผ๋กœ ๋ฐฐ์—ด์— ์ค‘์ฒฉ๋œ ๋ผ์šฐํ„ฐ(Nested Router)๋ฅผ ์ถ”๊ฐ€ํ•ด ์ค„ ์ˆ˜ ์žˆ๋‹ค

 

"/"๋ผ๋Š” path๋ฅผ ๊ฐ€์ง€๋ฉด Root์ปดํฌ๋„ŒํŠธ๊ฐ€ ์‹คํ–‰๋˜๊ณ  Root์˜ ์ž์‹ ์ปดํฌ๋„ŒํŠธ๋Š” Home,Product๊ฐ€ ์žˆ๋‹ค.

 

errorElement (v5์—๋Š” ์—†๊ณ , v6์—๋Š” ์žˆ์Œ)

  • ์šฐ๋ฆฌ์˜ ์ปดํฌ๋„ŒํŠธ์— ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•ด์„œ ์ถฉ๋Œ๋‚˜๊ฑฐ๋‚˜, ์ปดํฌ๋„ŒํŠธ์˜ ์œ„์น˜๋ฅผ ์ฐพ์ง€ ๋ชปํ•  ๋•Œ ์‚ฌ์šฉ.
  • Root element path์—๋„ ์—๋Ÿฌ๋ฅผ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ๋‹ค
  • ๋‹ค๋ฅธ ์ปดํฌ๋„ŒํŠธ๋“ค์„ ๋˜ ๋‹ค๋ฅธ ์ปดํฌ๋„ŒํŠธ์—์„œ ๋ฐœ์ƒํ•˜๋Š” ๋ฌธ์ œ๋กœ๋ถ€ํ„ฐ ๋ณดํ˜ธํ•ด์ค€๋‹ค
  • ํ•˜๋‚˜์˜ ์ปดํฌ๋„ŒํŠธ์—์„œ ์—๋Ÿฌ๊ฐ€ ๋‚˜๋„, ๋‹ค๋ฅธ ํŽ˜์ด์ง€๋ฅผ ๋ณด๋Š”๋ฐ ๋ฌธ์ œ๊ฐ€ ์—†๊ฒŒ ๋œ๋‹ค
const router = createBrowserRouter([
  {
    path: "/",
    element: <Root />,
    errorElement: <Error />,
    children: [
      { path: "/", element: <Home /> },
      { path: "/product", element: <Product /> },
    ],
  },
]);
function App() {
  return <RouterProvider router={router} />;
}

 

๐Ÿ“ŒOutlet(ํŠน์ • ์ปดํฌ๋„ŒํŠธ๋งŒ ๋ Œ๋”๋งํ•˜๋ฉด์„œ ๋ฐ”๋€Œ๋Š” ๊ฒฝ์šฐ ์‚ฌ์šฉ)

Root์—์„œ Outlet์„ ํ†ตํ•ด ์ž์‹ ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋ ˆ์ด์•„์›ƒํ™” ํ•˜๊ณ  ์žˆ๋‹ค.

=> {children} ์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ๊ณผ ๊ฐ™์€ ํšจ๊ณผ

function Root() {
  return (
    <>
      <MainNav />
      <main>
        <Outlet />
      </main>
    </>
  );
}

 

 

๋‚˜๋งŒ ๋ชฐ๋ž๋˜ Link์˜ ๊ธฐ๋Šฅ
<Link to=".."> ์ตœ์ƒ์œ„ ๊ฒฝ๋กœ๋กœ ์ด๋™ํ•˜๋Š” ๊ฒƒ์„ ์˜๋ฏธ
<Link to="../"> ํ˜„์žฌ ๊ฒฝ๋กœ์—์„œ ํ•œ ๋‹จ๊ณ„ ์œ„๋กœ ์ด๋™ํ•˜๋Š” ๊ฒƒ์„ ์˜๋ฏธ

์˜ˆ๋ฅผ ๋“ค์–ด, ํ˜„์žฌ ๊ฒฝ๋กœ๊ฐ€ /blog/react-router/example์ด๋ผ๋ฉด
<Link to="..">๋ฅผ ํด๋ฆญํ•˜๋ฉด ๊ฒฝ๋กœ๊ฐ€  /blog๋กœ ๋ณ€๊ฒฝ๋˜๋ฉฐ,
<Link to="../">๋ฅผ ํด๋ฆญํ•˜๋ฉด ๊ฒฝ๋กœ๊ฐ€blog/react-router๋กœ ๋ณ€๊ฒฝ๋œ๋‹ค
728x90
๋ฐ˜์‘ํ˜•
profile

Kimsoraโœจ

@sorarar

ํฌ์ŠคํŒ…์ด ์ข‹์•˜๋‹ค๋ฉด "์ข‹์•„์š”โค๏ธ" ๋˜๋Š” "๊ตฌ๋…๐Ÿ‘๐Ÿป" ํ•ด์ฃผ์„ธ์š”!

๊ฒ€์ƒ‰ ํƒœ๊ทธ

WH