Route
, Link
컴포넌트가 함께 유기적으로 동작하도록 묶어주는데 사용
BrowserRouter
, HashRouter
두 가지 유형의 Router가 있음
BrowserRouter
를 사용하려면 추가 설정이 필요#
부분을 활용해 페이지를 렌더링 함, 브라우저에서 호환성이 좋으며,
path
: 매치시킬 경로를 지정
element
: 매치되었을 때 보여줄 컴포넌트를 할당
HTML의 a태그와 유사한 기능으로 새 페이지로 이동하거나 다른 뷰를 렌더링할 수 있음
a태그를 사용하지 않는 이유는 링크를 누르면 재렌더링이 되는 것이 아닌 페이지가 새로고침 되기 때문이다.
to
: 이동할 경로를 지정
state
: props처럼 값을 넘겨줄 때 사용
onClick
: 링크가 클릭될 때, 실행될 함수를 지정할 수 있음
state
로 넘겨진 값을 받을 경우 useLocation
을 사용해서 받아야 함
// Home.jsx
<Link to='/profile' state={{ userName: '홍길동' }}>Profile</Link>
// Profile.jsx
const location = useLocation();
const userName = location.state.userName;
npm install react-router-dom
import React, { useState } from 'react';
import { BrowserRouter as Router, Route, Link } from 'react-router-dom';
import Home from "page/Home";
import About from "page/About";
import Profile from "page/Profile";
function App() {
const [user, setUser] = useState({ userName: '홍길동', userAge: 20 });
return (
<Router>
<div>
<nav>
<ul>
<li><Link to="/">Home</Link></li>
<li><Link to="/about/">About</Link></li>
<li><Link to="/profile/" state={{ user: user }}>Profile</Link></li>
</ul>
</nav>
<Routes>
<Route path="/" element={<Home />} />
<Route path="/about/" element={<About />} />
<Route path="/Profile/" element={<Profile />} />
</Routes>
</div>
</Router>
);
}
export default App;
Link state
: 이동하면서 정보를 보내는 데 사용
Route element
: 특정 라우트에 연결된 컴포넌트에 미리 값을 전달하는 데 사용