// src / routes / index.tsx
import { BrowserRouter, Routes, Route } from "react-router-dom";
<BrowserRouter>
<Routes>
<Route exact path="/" element={<Component />} />
<Route path="/r1" element={<Router1 />} />
<Route path="/r1/:name" element={<Router1 />}>
<Route index element={<Router1Home />} />
</Route>
</Routes>
</BrowserRouter>
History 객체를 생성하고, 초기 위치를 상태로 만들고 URL을 참조한다.
History 객체 ? History 객체는 History stack을 조작할 수 있도록 API를 제공하는 객체다. History stack은 접속 이력 스택으로 생각하면 된다. 브라우저의 뒤로가기 및 앞으로가기 버튼을 클릭할 때마다 참조하는 스택이다.
Route Config라는 경로 객체 트리를 생성한다.
Route는 Routes 안에서만 유효하다.
Route Config ? 모든 Route에 대한 설정을 정리해놓은 경로 객체 트리다.
path가 현재 URL과 일치하면 element가 렌더링된다.
URL의 params와 쿼리스트링을 쉽게 받아올 수 있는 훅이다.
// App.jsx
<Route path="/register/:id/:name" element={<Component />} />
// Component.jsx
import {useParams} from 'react-router-dom'
function Component() {
const params = useParams();
console.log(params);
}
'register / 1 / Charles'로 접속할 경우 콘솔창에 아래와 같이 찍힌다.
{
id: 1,
name: 'Charles'
}
useSearchParams는 두 개의 함수를 반환한다.
searchParams는 get을 통해 쉽게 쿼리스트링 값을 가져오도록 한다.
setSearchParams는 URL의 복잡도가 높아졌을 때 쿼리스트링을 쉽게 적용시킬 수 있는 함수이다.
// App.jsx
<Route path="/register/:id/:name" element={<Component />} />
// Component.jsx
import {useSearchParams} from 'react-router-dom'
function Component() {
const [searchParams, setSearchParams] = useSearchParams();
console.log(searchParams.get('id');
console.log(searchParams.get('name');
}
'register / 1 / Charles'로 접속할 경우 콘솔창에 아래와 같이 찍힌다.
1
'Charles'
유저가 현재 머물러 있는 페이지에 대한 정보를 알려준다.
import {useLocation} from 'react-router-dom';
const location = useLocation();
useEffect(() => {
console.log(location);
},[location])
콘솔을 살펴볼 경우 대표적으로 pathname과 search라는 객체가 출력된다.
양식이 제출되거나 특정 event가 발생했을 때 url을 조작할 수 있는 interface를 제공한다.
import {useNavigate} from 'react-router-dom';
function Func() {
const navigate = useNavigate();
const onClickImg = () => {
navigate(`/comment/id/내가 원하는 주소`);
};
return (
<img src={...} onClick={onClickImg} />
);
}
이미지를 클릭할 경우 useNavigate로 인해 기존 url이 www.naver.com이였다면, www.naver.com/comment/id...로 바뀌게 된다.
{replace: true or false}
를 받는다.<button onClick={() => navigate(-2)}> Go 2 pages back </button>
{children}을 사용해서 layout을 구성한 후 라우트에 항상 레이아웃과 연결짓도록 하는 것 대신, <Outlet />
을 사용하면 {children}을 사용하는 것과 같은 효과를 낼 수 있다.
<Routes>
<Route path="/member" element={<Member />}>
<Route path=":memberId" element={<MemberInfo /> />
</Route>
</Routes>
// Member.jsx
<div>
<header>Member</header>
<Outlet /> // MemberInfo의 component가 Outlet에 위치하게 된다.
</div>
< 참고 : https://charles098.tistory.com/182
https://velog.io/@tjdgus0528/React-Router-v6-%EC%A0%95%EB%A6%AC
https://devalice.tistory.com/112
https://velog.io/@yiyb0603/React-Router-dom%EC%9D%98-%EC%9C%A0%EC%9A%A9%ED%95%9C-hooks%EB%93%A4
https://basemenks.tistory.com/278 >