React Router DOM
2024. 12. 20. 09:55ㆍ웹 개발
1.준비하기
1.1 라이브러리 설치
npm install react-router-dom
1.2 main.jsx
import './index.css';
import React from 'react';
import App from './App.jsx';
import { createRoot } from 'react-dom/client';
createRoot(document.getElementById('root')).render(
<App />
)
1.3 app.jsx
import React from 'react';
import { Link, Route, BrowserRouter as Router, Routes } from 'react-router-dom';
import NotFound from './pages/NotFound';
const Home = () => <h2>홈 페이지</h2>;
const About = () => <h2>소개 페이지</h2>;
const Contact = () => <h2>연락처 페이지</h2>;
function App() {
return (
<Router>
<nav>
<ul>
<li><Link to="/">홈</Link></li>
<li><Link to="/about">소개</Link></li>
<li><Link to="/contact">연락처</Link></li>
</ul>
</nav>
<Routes>
<Route path="/" element={<Home />} />
<Route path="/about" element={<About />} />
<Route path="/contact" element={<Contact />} />
<Route path="*" element={<NotFound />} />
</Routes>
</Router>
);
}
export default App;
2.Router 부가기능, 훅과 컴포넌트
2.1 useParams, URL 파라미터 사용하기
import React from 'react';
import { BrowserRouter as Router, Route, Routes, Link, useParams } from 'react-router-dom';
const UserProfile = () => {
const { id } = useParams();
return <h2>사용자 ID: {id}</h2>;
};
function App() {
return (
<Router>
<nav>
<ul>
<li><Link to="/user/123">사용자 123</Link></li>
<li><Link to="/user/456">사용자 456</Link></li>
</ul>
</nav>
<Routes>
<Route path="/user/:id" element={<UserProfile />} />
</Routes>
</Router>
);
}
export default App;
- useParams: 경로에서 URL 파라미터를 가져온다. /user/123에서 id 파라미터를 추출
- :id: Route 경로에 파라미터를 사용하여 동적 경로를 정의한다.
2.2 useNavigate, 프로그램적으로 네비게이션 처리
import React from 'react';
import { BrowserRouter as Router, Route, Routes, useNavigate } from 'react-router-dom';
const Home = () => {
const navigate = useNavigate();
const goToPage = (page) => {
switch (page) {
case 'about':
navigate('/about');
break;
case 'contact':
navigate('/contact');
break;
default:
console.log('Invalid page');
}
};
return (
<div>
<h2>홈 페이지</h2>
<button onClick={() => goToPage('about')}>소개 페이지로 이동</button>
<button onClick={() => goToPage('contact')}>연락 페이지로 이동</button>
</div>
);
};
const About = () => <h2>소개 페이지</h2>;
const Contact = () => <h2>연락 페이지</h2>;
function App() {
return (
<Router>
<Routes>
<Route path="/" element={<Home />} />
<Route path="/about" element={<About />} />
<Route path="/contact" element={<Contact />} />
</Routes>
</Router>
);
}
export default App;
- useNavigate: 현재 경로를 제어하고 프로그램적으로 다른 경로로 이동할 수 있게 하는 훅.
- navigate('/about')와 같이 사용
2.3 Navigate 컴포넌트 (리디렉션 처리)
import React from 'react';
import { BrowserRouter as Router, Route, Routes, Navigate } from 'react-router-dom';
const Home = () => {
const isLoggedIn = false; // 로그인 여부 체크 (예시)
if (!isLoggedIn) {
return <Navigate to="/login" />;
}
return <h2>홈 페이지</h2>;
};
const Login = () => <h2>로그인 페이지</h2>;
function App() {
return (
<Router>
<Routes>
<Route path="/login" element={<Login />} />
<Route path="/home" element={<Home />} />
</Routes>
</Router>
);
}
export default App;
- Navigate: URL을 변경하여 다른 페이지로 리디렉션
- 조건에 따라 Navigate를 사용하여 리디렉션을 처리할 수 있다.
2.4 useLocation, 현재 위치 경로 추적
import React from 'react';
import { BrowserRouter as Router, Route, Routes, useLocation } from 'react-router-dom';
const CurrentLocation = () => {
const location = useLocation();
return <h2>현재 경로: {location.pathname}</h2>;
};
function App() {
return (
<Router>
<Routes>
<Route path="/" element={<CurrentLocation />} />
</Routes>
</Router>
);
}
export default App;
- useLocation: 현재 URL 경로와 상태 정보를 제공하는 훅
2.5 useParams 훅, 동적 경로에서 파라미터를 가져오기
import React from 'react';
import { BrowserRouter as Router, Route, Routes, useParams } from 'react-router-dom';
const UserProfile = () => {
const { id } = useParams();
return <h2>사용자 ID: {id}</h2>;
};
function App() {
return (
<Router>
<Routes>
<Route path="/user/:id" element={<UserProfile />} />
</Routes>
</Router>
);
}
export default App;
- useParams: 경로에서 파라미터를 추출 예를 들어, /user/123 경로에서 id는 123
2.6 중첩 라우팅
import React from 'react';
import { BrowserRouter as Router, Route, Routes, Link } from 'react-router-dom';
const Dashboard = () => (
<div>
<h2>대시보드</h2>
<nav>
<ul>
<li><Link to="profile">프로필</Link></li>
<li><Link to="settings">설정</Link></li>
</ul>
</nav>
<Routes>
<Route path="profile" element={<h3>프로필 페이지</h3>} />
<Route path="settings" element={<h3>설정 페이지</h3>} />
</Routes>
</div>
);
function App() {
return (
<Router>
<Routes>
<Route path="/dashboard/*" element={<Dashboard />} />
</Routes>
</Router>
);
}
export default App;
- 중첩 라우팅: Dashboard 컴포넌트 안에서 다른 경로들을 중첩해서 렌더링.
- *을 사용하여 하위 경로들을 모두 처리
'웹 개발' 카테고리의 다른 글
React, Axios (0) | 2024.12.23 |
---|---|
Javascript, Async / Await (2) | 2024.12.20 |
React Immer (0) | 2024.12.19 |
React To-Do List (0) | 2024.12.19 |
React CSS 스타일링 방법 정리 (0) | 2024.12.19 |