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