<a>
태그 필요React Router
…
$ yarn add react-router-dom
BrowserRouter
Route
element
path
현재 path === 현재 url → element 속성으로 주어진 값 렌더링Routes
import { BrowserRouter, Route, Routes } from "react-router-dom";
function App() {
return (
<>
<BrowserRouter>
<Routes>
<Route path="/" element={<Home />} />
<Route path="/login" element={<Login />} />
</Routes>
</BrowserRouter>
</>
);
}
export default App;
<Route path="/post/:postId" element={} />
<Route path="/post/:author/:postId" element={} />
import { Link } from 'react-router-dom';
<Link to="/post">포스트 목록 보러가기</Link>
relative
route
기본값, 계층 구조
path
상대 경로로 표현 가능 → .
..
가능
<Link to=".." relative="path"> ... </Link>
preventScrollReset
링크 클릭시 스크롤 위치 재설정 방지
<Link to="/" preventScrollReset={true}> ... </Link>
replace
false
기본값true
해당 주소로 이동 후, 직전 path로 뒤로가기 불가능state
값 넘겨주기
<Link to="/post/detail" state={{postId : 2}}> ... </Link>
reloadDocument
<a>
태그처럼 동작const location = useLocation();
import { useNavigae } from "react-router-dom";
const navigate = useNavigate(); // 함수 반환
navigate("/");
navigate(-1); // 뒤로 가기
navigate(1); // 앞으로 가기
navigate("/", { replace: true }); // 뒤로가기 막기
navigate("/new-route", { state: { key: "value" }});
<Route path="/post" element={<PostList />}>
<Route path=":postId" element={<PostDetail />} />
</Route>
import { Outlet } from "react-router-dom";
function App() {
return (
<BrowserRouter>
<Routes>
<Route path="/" element={<Home />} />
<Route path="about" element={<About />}>
<Route path="team" element={<Team />}/>
</Route>
</Routes>
</BrowserRouter>
);
}
function About() {
return (
<>
<nav>
<Link to="team">Meet the Team</Link>
</nav>
<Outlet />
</>
);
}
/about/team
경로로 이동Outlet
위치에 Team 컴포넌트 렌더링<Outlet />
없으면 /about/team
으로 변경되어도 Team 렌더링 X?
기준으로 key, value 쌍 /post/detail?postId=21&author=jnary
import { useSearchParams } from "react-router-dom";
const [searchParams, setSearchParams] = useSearchParams();
// 'name' 쿼리 파라미터의 현재값 반환
const name = searchParams.get('name');
// 'name' 쿼리 파라미터 업데이트
// 만약 쿼리에 없으면 추가됨
// 새로운 객체 생성하여 전달, 기존 파라미터 무시
setSearchParams({name: value});
// 기존 쿼리 파라미터 유지하면서 특정 파라미터만 수정
searchParams.set("name", "jnary");
setSearchParams(searchParams);