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>
);
}
Navigation
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