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