728x90
๐ react router ??
- ๋ฆฌ์กํธ ์ดํ๋ฆฌ์ผ์ด์ ์ ๋ผ์ฐํ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ
- ๋จ์ผ ํ์ด์ง ์ดํ๋ฆฌ์ผ์ด์ ์์ ์ฌ๋ฌ ํ์ด์ง๋ฅผ ๋ง๋ฆ
- URL ๋งค๊ฐ ๋ณ์ ๋ฐ Query String ์ฒ๋ฆฌ
- ๋ธ๋ผ์ฐ์ History ๋ฐ ํ์ ๊ด๋ฆฌ
- ์ค์ฒฉ๋ ๊ฒฝ๋ก ๋ ์ด์์ ๋ง๋ค๊ธฐ
- ์ธ์ฆ์ ์ํ ๋ณดํธ๋ ๊ฒฝ๋ก ๊ตฌํ
- ์ค์น ๋ฐฉ๋ฒ?
- npm install react-router-dom
๐ BrowserRouter, Routes, Route, Link, Outlet, useParams
- import { BrowserRouter, Routes, Route, Link, Outlet, useParams } from 'react-router-dom';
- ์ฌ์ฉํ ๋ import ํด์ค์ผํจ!
- BrowerRouter
- Routes , Route
- Link
- Outlet
- <Outlet /> { /** ์ถ๊ฐ์ ์ธ ์ปดํฌ๋ํธ๊ฐ ๋ค์ด๊ฐ ์์น์๋ Outlet ์ ๋ฃ์ด์ผํจ. */}
- userParams
- <Routes>
<Route path="/customer/:name" element={<Info />} /> { /** ์๋ฐ์ pathvariable ๊ณผ ๋น์ทํ ๋๋. */}
</Routes> - ํ๋ผ๋ฏธํฐ๋ ์๋์ผ๋ก ๋ค์ด๊ฐ๊ฒ ํจ.
- const { name } = useParams();
- <Routes>
import { createRoot } from 'react-dom/client';
import { BrowserRouter, Routes, Route, Link, Outlet, useParams, NavLink } from 'react-router-dom';
import './Navbar.css';
function Home(){
return <h1>home Page</h1>
}
function About(){
return (
<div>
<h1>about page</h1>
<nav>
<Link to="/about/ceo">Ceo</Link>
</nav>
<Outlet /> { /** ์ถ๊ฐ์ ์ธ ์ปดํฌ๋ํธ๊ฐ ๋ค์ด๊ฐ ์์น์๋ Outlet ์ ๋ฃ์ด์ผํจ. */}
</div>
);
}
function Contact() {
return <h1>contact Page</h1>
}
function AboutCeo() {
return <h2>About Ceo</h2>
}
function Info() {
const { name } = useParams();
return <h1>์ ๋ {name} ์
๋๋ค.</h1>
}
function App2() {
return (
<BrowserRouter>
<nav>
<Link to="/customer/ํ๊ธธ๋">ํ๊ธธ๋</Link> | {(" ")}
<Link to="/customer/๊น์ฒ ์">๊น์ฒ ์</Link> | {(" ")}
<Link to="/customer/์ ์">์ ์</Link>
</nav>
<Routes>
<Route path="/customer/:name" element={<Info />} /> { /** ์๋ฐ์ pathvariable ๊ณผ ๋น์ทํ ๋๋. */}
</Routes>
</BrowserRouter>
);
}
const naveLinkStyles = ( {isActive} ) => (
{
color: isActive ? 'blue' : 'gray',
textDecoration : isActive ? 'none' : 'underline',
fontWeight : isActive ? 'bolder' : 'normal'
}
);
function App() {
return (
<BrowserRouter>
{ /* ๋ค๋น๊ฒ์ด์
*/ }
<h1>๋ฐฉ๋ฒ 1</h1>
<nav>
<NavLink to="/" style={naveLinkStyles}>ํ</NavLink> | {" "}
<NavLink to="/about" style={naveLinkStyles}>ํ์ฌ์๊ฐ</NavLink> | {" "}
<NavLink to="/contact" style={naveLinkStyles}>๋ฌธ์ํ๊ธฐ</NavLink>
</nav>
<h1>๋ฐฉ๋ฒ 2</h1>
<nav>
<NavLink to="/">ํ</NavLink> | {" "}
<NavLink to="/about">ํ์ฌ์๊ฐ</NavLink> | {" "}
<NavLink to="/contact">๋ฌธ์ํ๊ธฐ</NavLink>
</nav>
<h1>๋ฐฉ๋ฒ 3</h1>
<nav>
<NavLink to="/" className={ ({isActive}) => (isActive ? 'active-link' : 'inactive-link' ) } >ํ</NavLink> | {" "}
<NavLink to="/about" className={ ({isActive}) => (isActive ? 'active-link' : 'inactive-link' ) } >ํ์ฌ์๊ฐ</NavLink> | {" "}
<NavLink to="/contact" className={ ({isActive}) => (isActive ? 'active-link' : 'inactive-link' ) } >๋ฌธ์ํ๊ธฐ</NavLink>
</nav>
{ /** routes */}
<Routes>
{ /** Route์ path ๋ก ๋ค์ด์์ ๋, --> element ์ ๊ฒ์ ํธ์ถํ๋ผ. */}
<Route path="/" element={<Home />} />
<Route path="/about" element={<About />}>
<Route path="ceo" element={<AboutCeo />} />
</Route>
<Route path="/contact" element={<Contact />} />
</Routes>
</BrowserRouter>
);
}
createRoot(document.getElementById('reactRouter')).render(
<App />
);


๐ NavLink ๋ฅผ ์ด์ฉํด์ active ํ ๋๋ง๋ค ๋ค๋ฅธ css ์ฒ๋ฆฌํ๋ ๋ฐฉ๋ฒ ?
- isActive ๊ฐ์ true, false ๋ก ๋ฐ์์ฌ ์ ์์.
- isActive ๋ ์ด๋ฆ์ด ๋ฌด์กฐ๊ฑด ๊ณ ์ ๋์ด ์์.
- ๊ฐ ์ปดํฌ๋ํธ๋ฅผ ๋น๊ตํด์, link ๊ฐ ๋์ด ์์ผ๋ฉด --> true ๊ฐ์ด ๋์ด.
- NavLink ๋ ํด๋ฆญ ํ ๋๋ง๋ค ๋ค๋ฅธ style์ ๋ฃ์ ๋ --> ์ฃผ๋ก ์ฌ์ฉ๋จ.
- ๋ฐฉ๋ฒ 1
- <NavLink to="/" style={naveLinkStyles}>ํ</NavLink>
- const naveLinkStyles = ( {isActive} ) => (
{
color: isActive ? 'blue' : 'gray',
textDecoration : isActive ? 'none' : 'underline',
fontWeight : isActive ? 'bolder' : 'normal'
}
);
- ๋ฐฉ๋ฒ 2
- Link ํด๋ฆญ ๋๋ฉด --> ํด๋น ๋งํฌ์ ์๋์ผ๋ก active ๋ผ๋ ํด๋์ค ์๊น.
- nav > a.active { ~~ } ์ฒ๋ฆฌ ํด์ค๋ ๋จ.

- ๋ฐฉ๋ฒ 3
- <NavLink to="/" className={ ({isActive}) => (isActive ? 'active-link' : 'inactive-link' ) } >ํ </NavLink>
๐ ?
- ใ ใ
์ถ์ฒ :
[์์ด๋ณด ํํ์ด์ง ๋ง๋ค๊ธฐ ๋ฆฌ์กํธ ๊ธฐ์ด]
https://www.youtube.com/watch?v=NxETFxGL8A4&list=PLTb3qGCzYjS2AliTIbz9eAGjZSdEQa3m1&index=34
๊ฐ๋ฐ ๊ณต๋ถ๋ฅผ ์ํ ๋ธ๋ก๊ทธ ์ ๋๋ค.
์ค๋ฅ๊ฐ ์๋ค๋ฉด ๋๊ธ๋ก ์๋ ค์ฃผ์ธ์!
๊ฐ์ฌํฉ๋๋ค.

728x90
'front > react' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| [react] React Hooks 1 (useState, useEffect) (0) | 2026.01.04 |
|---|---|
| [react] React Transition (useTransition) (0) | 2026.01.04 |
| [react] css ์ฌ์ฉ ๊ด๋ จ (inline css, css obj, import css, import css module, composes, global css className) (1) | 2026.01.02 |
| [react] createPortal, Suspense (0) | 2026.01.01 |
| [React] ์ด๋ฒคํธ ํธ๋ค๋ฌ (0) | 2026.01.01 |