| ์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | |||
| 5 | 6 | 7 | 8 | 9 | 10 | 11 |
| 12 | 13 | 14 | 15 | 16 | 17 | 18 |
| 19 | 20 | 21 | 22 | 23 | 24 | 25 |
| 26 | 27 | 28 | 29 | 30 | 31 |
- ํฐํธ์จ์ดํธ
- ๊ทธ๋ฃน์ ๋ ํฐ
- fontweight
- CDN
- inlineblock
- ๋ชจ๋์นํฐํธ
- ์ถ์ฝ
- ํด๋์ค์ ๋ ํฐ
- ์ ๋๋ฒ์ ์ ๋ ํฐ
- texttransform
- borderspacing
- selectorslevel4
- wordspacing
- ์ฃผ์
- ํฅ์ค์ฝ๋
- ํ์ ์ ๋ ํฐ
- liststyleimage
- formtag
- ๊ตฌ๊ธํฐํธ
- ํผํ๊ทธ
- borderstyle
- ์์ด๋์ ๋ ํฐ
- gtammertable
- ๋นํ๊ทธ
- liststyletype
- bordercollapse
- textdecoration
- captionside
- liststyleposition
- textshadow
- Today
- Total
็ก์
React Router (react-router-dom) ๋ณธ๋ฌธ
๐ก React Router (react-router-dom)
React Router๋ React ์ ํ๋ฆฌ์ผ์ด์ ์์ ํด๋ผ์ด์ธํธ ์ฌ์ด๋ ๋ผ์ฐํ (Client-side Routing)์ ๊ตฌํํ๊ธฐ ์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ.
react-router-dom์ ์ด๋ฅผ ์น ๋ธ๋ผ์ฐ์ ํ๊ฒฝ์์ ์ฌ์ฉํ ์ ์๋๋ก ์ ๊ณตํ๋ ํจํค์ง.
โผ๏ธ ์ฃผ์ ํน์ง
1๏ธโฃ URL์ ๋ฐ๋ฅธ ํ๋ฉด ๋ ๋๋ง (Routing)
URL ๊ฒฝ๋ก์ ๋ฐ๋ผ ์๋ก ๋ค๋ฅธ React ์ปดํฌ๋ํธ๋ฅผ ํ๋ฉด์ ํ์ํ ์ ์๋ค.
<Route path="/about" element={<About />} />
<Route path="/products" element={<Products />} />
- ์๋ฅผ ๋ค์ด /about, /products์ ๊ฐ์ ๊ฒฝ๋ก์ ์ ๊ทผํ๋ฉด ์ค์ ๋ ์ปดํฌ๋ํธ๋ฅผ ๋ ๋๋งํ๋ค.
2๏ธโฃ ๋์ URL ์ฒ๋ฆฌ (URL Parameters)
URL์ ๊ฐ์ ํฌํจํ์ฌ ํ๋์ ์ปดํฌ๋ํธ๋ก ์ฌ๋ฌ ํ์ด์ง๋ฅผ ์ฒ๋ฆฌํ ์ ์๋ค.
<Route path="/products/:id" element={<ProductDetail />} />
/products/1
/products/2
/products/3
- :id๋ ๋์ URL ํ๋ผ๋ฏธํฐ์ด๋ฉฐ, useParams()๋ฅผ ํตํด ๊ฐ์ ๊ฐ์ ธ์ฌ ์ ์๋ค.
- ์: const { id } = useParams();
3๏ธโฃ ํ์ด์ง ์ด๋ (Navigation)
ํ์ด์ง ์ ์ฒด๋ฅผ ์๋ก๊ณ ์นจํ์ง ์๊ณ ๋ค๋ฅธ ๊ฒฝ๋ก๋ก ์ด๋ํ ์ ์๋ค.
- <Link> ์ปดํฌ๋ํธ: HTML์ <a> ํ๊ทธ์ฒ๋ผ ์ด๋ํ๋ฉด์๋ SPA ๋ฐฉ์์ ๋น ๋ฅธ ํ๋ฉด ์ ํ์ด ๊ฐ๋ฅํ๋ค.
4๏ธโฃ ์ค์ฒฉ ๋ผ์ฐํ (Nested Routing)
๋ถ๋ชจ ๋ผ์ฐํธ ์์ ์์ ๋ผ์ฐํธ๋ฅผ ๊ตฌ์ฑํ์ฌ ๋ณต์กํ ํ๋ฉด ๊ตฌ์กฐ๋ฅผ ๊ด๋ฆฌํ ์ ์๋ค.
์๋ฅผ ๋ค์ด /dashboard/profile์ฒ๋ผ ํ๋์ ํ์ด์ง ๋ด๋ถ์์ ์ฌ๋ฌ ํ์ ํ์ด์ง๋ฅผ ๊ตฌ์ฑํ ๋ ์ฌ์ฉํ๋ค.
Outlet์ ํตํด ์ค์ฒฉ๋ ๋ผ์ฐํธ์ ์ปดํฌ๋ํธ๊ฐ ๋ ๋๋ง๋๋ค.
โผ๏ธ ์ฃผ์ ์ปดํฌ๋ํธ
๐น BrowserRouter
์ ํ๋ฆฌ์ผ์ด์ ์ ์ฒด๋ฅผ ๊ฐ์ธ๋ ๊ฐ์ฅ ๊ธฐ๋ณธ์ ์ธ ๋ผ์ฐํฐ์ด๋ค.
HTML5 History API(pushState, replaceState)๋ฅผ ์ฌ์ฉํ์ฌ URL์ ๋ณ๊ฒฝํ๊ณ , ํ์ด์ง๋ฅผ ์๋ก๊ณ ์นจํ์ง ์๊ณ ๋ ํ๋ฉด์ ์ ํํ๋ฉฐ ๋ธ๋ผ์ฐ์ ์ ๋ค๋ก๊ฐ๊ธฐ·์์ผ๋ก๊ฐ๊ธฐ ๊ธฐ๋ฅ์ ์ง์ํ๋ค.
import { BrowserRouter } from 'react-router-dom';
function App() {
return (
<BrowserRouter>
{/* ๋ผ์ฐํ
๊ด๋ จ ์ปดํฌ๋ํธ๋ค์ด ์ฌ๊ธฐ์ ์์นํฉ๋๋ค */}
</BrowserRouter>
);
}
๐น Routes / Route
Routes๋ ์ฌ๋ฌ Route๋ฅผ ๊ด๋ฆฌํ๋ฉฐ, ํ์ฌ URL๊ณผ ์ผ์นํ๋ Route๋ฅผ ์ฐพ์ ํด๋น Route์ element๋ฅผ ๋ ๋๋งํ๋ค.
Route๋ ํน์ URL ๊ฒฝ๋ก์ ๋ ๋๋งํ ์ปดํฌ๋ํธ๋ฅผ ์ฐ๊ฒฐํ๋ค.
import { Routes, Route } from 'react-router-dom';
function App() {
return (
<Routes>
<Route path="/" element={<Home />} />
<Route path="/about" element={<About />} />
<Route path="/contact" element={<Contact />} />
</Routes>
);
}
๐น Link
์ผ๋ฐ์ ์ธ <a> ํ๊ทธ์ฒ๋ผ ์ด๋ ๊ธฐ๋ฅ์ ์ ๊ณตํ์ง๋ง, React Router๊ฐ URL์ ๋ณ๊ฒฝํ๊ณ ํ์ํ ์ปดํฌ๋ํธ๋ง ๋ ๋๋งํ๋ฏ๋ก ํ์ด์ง ์ ์ฒด๊ฐ ์๋ก๊ณ ์นจ๋์ง ์๋๋ค.
import { Link } from 'react-router-dom';
function Navigation() {
return (
<nav>
<Link to="/">ํ</Link>
<Link to="/about">์๊ฐ</Link>
<Link to="/contact">์ฐ๋ฝ์ฒ</Link>
</nav>
);
}
๐น NavLink
๋ด๋ถ์ ์ผ๋ก Link๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๋์ํ๋ฉฐ, ํ์ฌ URL๊ณผ ์ผ์นํ๋ ๊ฒฝ์ฐ isActive ๊ฐ์ ์ ๊ณตํ๋ค.
์ด๋ฅผ ํ์ฉํ์ฌ ํ์ฑ ๋ฉ๋ด ์คํ์ผ์ ์ฝ๊ฒ ์ ์ฉํ ์ ์๋ค.
import { NavLink } from 'react-router-dom';
function Navigation() {
return (
<nav>
<NavLink
to="/"
style={({ isActive }) => isActive ? { color: 'red' } : undefined}
>
ํ
</NavLink>
<NavLink
to="/about"
className={({ isActive }) => isActive ? 'active-link' : ''}
>
์๊ฐ
</NavLink>
</nav>
);
}
๐น HashRouter (์ ํ)
URL์ #์ ํฌํจํ๋ ๋ฐฉ์์ผ๋ก ๋์ํ๊ธฐ ๋๋ฌธ์ ์๋ฒ์ ๋ณ๋ ๋ผ์ฐํ ์ค์ ์ด ํ์ํ์ง ์๋ค.
์๋ฒ์์ URL ์ฌ์์ฑ(Rewrite) ์ค์ ์ ํ ์ ์๋ ํ๊ฒฝ์ด๋ผ๋ฉด ์ผ๋ฐ์ ์ผ๋ก BrowserRouter ์ฌ์ฉ์ด ๊ถ์ฅ๋๋ค.
import { HashRouter } from 'react-router-dom';
function App() {
return (
<HashRouter>
{/* ๋ผ์ฐํ
๊ด๋ จ ์ปดํฌ๋ํธ๋ค์ด ์ฌ๊ธฐ์ ์์นํฉ๋๋ค */}
</HashRouter>
);
}
- BrowserRouter: https://example.com/about
- HashRouter: https://example.com/#/about
๐น Outlet
๋ถ๋ชจ ๋ผ์ฐํธ์์ ์ค์ฒฉ๋(์์) ๋ผ์ฐํธ๊ฐ ๋ ๋๋ง๋ ์์น๋ฅผ ์ง์ ํ๋ ์ปดํฌ๋ํธ์ด๋ค.
๊ณตํต ๋ ์ด์์(Header, Sidebar ๋ฑ)์ ์ ์งํ๋ฉด์ ๋ด๋ถ ํ๋ฉด๋ง ๋ณ๊ฒฝํ ๋ ์ฌ์ฉํ๋ค.
function App() {
return (
<Routes>
<Route path="/dashboard" element={<DashboardLayout />}>
{/* ์ค์ฒฉ๋ ๋ผ์ฐํธ๋ค */}
<Route index element={<DashboardHome />} />
<Route path="profile" element={<Profile />} />
<Route path="settings" element={<Settings />} />
</Route>
</Routes>
);
}
// Dashboard ์ปดํฌ๋ํธ ๋ด์์ Outlet์ ์ฌ์ฉํ์ฌ ์ค์ฒฉ ๋ผ์ฐํธ ๋ ๋๋ง
function Dashboard() {
return (
<div>
<h1>๋์๋ณด๋</h1>
<nav>
<Link to="/dashboard">ํ</Link>
<Link to="/dashboard/profile">ํ๋กํ</Link>
<Link to="/dashboard/settings">์ค์ </Link>
</nav>
<Outlet /> {/* ์ค์ฒฉ๋ ๋ผ์ฐํธ๊ฐ ์ฌ๊ธฐ์ ๋ ๋๋ง๋ฉ๋๋ค */}
</div>
);
}
๐น useNavigate (ํ๋ก๊ทธ๋๋ฐ ๋ฐฉ์ ์ด๋)
์ฌ์ฉ์์ ์ด๋ฒคํธ๋ ํน์ ๋ก์ง ์คํ ํ ์ํ๋ ๊ฒฝ๋ก๋ก ์ด๋ํด์ผ ํ ๋ ์ฌ์ฉํ๋ค.
import { useNavigate } from "react-router-dom";
function Login() {
const navigate = useNavigate();
const handleLogin = () => {
// ๋ก๊ทธ์ธ ์ฑ๊ณต
navigate("/dashboard");
};
return (
<button onClick={handleLogin}>
๋ก๊ทธ์ธ
</button>
);
}
- useNavigate๋ ์ด๋ฒคํธ ๋ฐ์ ํ ์ฝ๋์์ ์ํ๋ ๊ฒฝ๋ก๋ก ์ด๋ํด์ผ ํ ๋ ์ฌ์ฉํ๋ค.
๐น useParams (๋์ URL ๊ฐ ๊ฐ์ ธ์ค๊ธฐ)
Route์์ ์ ์ํ URL ํ๋ผ๋ฏธํฐ ๊ฐ์ ๊ฐ์ฒด ํํ๋ก ๋ฐํํ๋ค.
import { useParams } from "react-router-dom";
function ProductDetail() {
const { id } = useParams();
return (
<h1>
์ํ ๋ฒํธ : {id}
</h1>
);
}
/* URL - /products/10, ๊ฒฐ๊ณผ - ์ํ ๋ฒํธ : 10 */
- useParams() ์ฌ์ฉ ์์:
- useParams๋ฅผ importํ๋ค.
- useParams()๋ฅผ ํธ์ถํ์ฌ ๋ณ์์ ์ ์ฅํ๋ค.
- Route์ path์ /:๋ณ์๋ช ์ ์์ฑํ๋ค.
- ์ ์ฅํ ๋ณ์๋ฅผ ์ํ๋ ๊ณณ์์ ์ฌ์ฉํ๋ค.
๐ ํ: 404 ํ์ด์ง ์ฒ๋ฆฌ ์ถ๊ฐ ๐
<Routes>
<Route path="/" element={<Home />} />
<Route path="*" element={<NotFound />} />
</Routes>
- * ๊ฒฝ๋ก๋ ์ ์๋์ง ์์ ๋ชจ๋ URL์ ์ฒ๋ฆฌํ๋ฉฐ, ์ผ๋ฐ์ ์ผ๋ก Not Found ํ์ด์ง ๊ตฌํ์ ์ฌ์ฉํ๋ค.
- ์ค์ ํ๋ก์ ํธ์์๋ ๊ฑฐ์ ํ์.
- ๋ฐ๋์ ๋ง์ง๋ง์ ์์ฑํ๋ ๊ฒ์ด ์ผ๋ฐ์ .
๐ React Router DOM ์ฃผ์ ์ปดํฌ๋ํธ ๐
| ์ปดํฌ๋ํธ | ์ญํ |
| BrowserRouter | History API ๊ธฐ๋ฐ์ผ๋ก URL๊ณผ UI๋ฅผ ์ฐ๊ฒฐํ๋ ๊ธฐ๋ณธ ๋ผ์ฐํฐ |
| Routes | ํ์ฌ URL๊ณผ ์ผ์นํ๋ Route๋ฅผ ๊ด๋ฆฌ |
| Route | URL ๊ฒฝ๋ก์ ์ปดํฌ๋ํธ๋ฅผ ์ฐ๊ฒฐ |
| Link | ์๋ก๊ณ ์นจ ์์ด ํ์ด์ง ์ด๋ |
| NavLink | ํ์ฌ ํ์ฑํ๋ ๋งํฌ์ ์คํ์ผ ์ ์ฉ |
| Outlet | ์ค์ฒฉ ๋ผ์ฐํธ ์ปดํฌ๋ํธ๋ฅผ ๋ ๋๋งํ๋ ์์น |
| HashRouter | # ๊ธฐ๋ฐ์ผ๋ก ๋ผ์ฐํ ํ๋ฉฐ ์ ์ ํธ์คํ ํ๊ฒฝ์์ ์ฌ์ฉ |
๐ Hooks ์ฃผ์ API ๐
| API | ์ญํ |
| useParams | URL ํ๋ผ๋ฏธํฐ ๊ฐ ๊ฐ์ ธ์ค๊ธฐ |
| useNavigate | ์ฝ๋๋ก ํ์ด์ง ์ด๋ |
| useLocation | ํ์ฌ URL ์ ๋ณด ํ์ธ |
| useSearchParams | Query String ๊ด๋ฆฌ |
| useOutletContext |
๋ถ๋ชจ Outlet์์ ์ ๋ฌํ ๋ฐ์ดํฐ ์ฌ์ฉ |
๐ React Router DOM ์ค์น ๋ฐฉ๋ฒ ๐


terminal
npm install react-router-dom
https://reactrouter.com/api/components/Link
https://reactrouter.com/api/components/Links
https://reactrouter.com/api/components/NavLink
https://reactrouter.com/api/components/Route
https://reactrouter.com/api/components/Routes
https://reactrouter.com/api/hooks/useParams
'<React>' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| Context API (์ฝํ ์คํธ ์์ดํผ์์ด) (0) | 2026.07.15 |
|---|---|
| Styled component (์คํ์ผ๋ ์ปดํฌ๋ํธ) (0) | 2026.07.15 |
| React์์ map ํจ์ ์ฌ์ฉํ๊ธฐ (0) | 2026.07.14 |
| Hash URL (0) | 2026.07.14 |
| State (์คํ ์ดํธ) (0) | 2026.07.08 |
