React Router

react-router-dom ver.6

κ³΅μ‹λ¬Έμ„œ

Installation

npm i react-router-dom

Configuring Routes

  • v6둜 λ°”λ€Œλ©΄μ„œ switchλŠ” Routes둜 λŒ€μ²΄λ˜μ—ˆμŒ

  • <Route><Route/> 사이에 μžμ‹ μ»΄ν¬λ„ŒνŠΈλ₯Ό λ„£λŠ” 방식이 μ•„λ‹Œ element속성을 톡해 μžμ‹ μ»΄ν¬λ„ŒνŠΈλ₯Ό 할당함

import {
  BrowserRouter,
  Routes,
  Route,
} from "react-router-dom";

const Router = () => {
  return (
    <BrowserRouter>
      <Routes>
        <Route path="/" element={<Home />}>
          <Route index element={<Home />} />
          <Route path="teams" element={<Teams />}>
            <Route path=":teamId" element={<Team />} />
            <Route path="new" element={<NewTeamForm />} />
            <Route index element={<LeagueStandings />} />
          </Route>
        </Route>
      </Routes>
    </BrowserRouter>
  );
}
  • Linkμ»΄ν¬λ„ŒνŠΈλ₯Ό 톡해 μœ μ €μ˜ URL을 λ°”κΏ€ 수 있음

<Link to="/">Home</Link>
<Link to="about">About</Link>

Reading URL Parameters

  • v6 μ΄μƒλΆ€ν„°λŠ” μžλ™μœΌλ‘œ type|undefindμž„μ„ μ•Œ 수 있음(interface ν•„μš”μ—†μŒ)

import { useParams } from "react-router-dom";
...
<Routes>
  <Route
    path="items/:itemId"
    element={<Item />}
  />
</Routes>
...
const params = useParams();
return <h1>{params.itemId}</h1>

useLocation()

// parent
<Link
  to={`/${coin.id}`}
  state={{ name: coin.name }}
>

//child
import { useLocation } from "react-router-dom";

interface RouteState {
  state: {
    name: string;
  };
}

const { state } = useLocation() as RouteState;
// v6λΆ€ν„°λŠ” μ œλ„€λ¦­μ„ μ§€μ›ν•˜μ§€ μ•ŠμŒ

Nested Routes

  • RouteλŠ” μ„œλ‘œ 쀑첩될 수 있음(λΆ€λͺ¨λ₯Ό μƒμ†ν•˜λŠ” μžμ‹)

  • λ Œλ”λ§ μœ„μΉ˜λŠ” λΆ€λͺ¨ μš”μ†Œμ˜<Outlet />의 μœ„μΉ˜λ₯Ό 따름

<Routes>
  <Route path="items" element={<Items />}>
    <Route path=":itemId" element={<Item />} />
    <Route path="sent" element={<SentItems />} />
  </Route>
</Routes>

...

function Items() {
  return (
    <div>
      <h1>Items</h1>
      <Outlet />
    </div>
  );
}
  • URL에 따라 λ³€κ²½λ˜λŠ” λ‚΄λΆ€ μ„Ήμ…˜μ΄ μžˆλŠ” λ ˆμ΄μ•„μ›ƒμ—μ„œ UIλ₯Ό λ§Œλ“œλŠ”λ° 적합함, 즉 ν•œκ°œμ˜ 루트 λ ˆμ΄μ•„μ›ƒμ—μ„œ URL에 따라 일뢀 λ‚΄λΆ€ μ»¨ν…μΈ λ§Œ λ³€κ²½λ˜λŠ” UIλ₯Ό λ§Œλ“€ 수 있음

<Routes>
  <Route path="/" element={<Layout />}>
    <Route path="items" element={<Items />} />
    <Route path="another" element={<Another />} />
  </Route>
</Routes>

...

function Layout() {
  return (
    <div>
      <h1>Welcome to the app!</h1>
      <nav>
        <Link to="items">Items</Link> |{" "}
        <Link to="another">Another Items</Link>
      </nav>
      <div className="content">
        <Outlet />
      </div>
    </div>
  );
}

Last updated