-라이브러리 설치
yarn add react-router-dom
npm i react-router-dom
//index.js 에서
import { BrowserRouter } from 'react-router-dom';
<Link to="경로">링크 이름</Link>
-a태그 : 기본기능x History API로 기능수정
주소의 경로에 유동적인 값을 넣는 형태
<Route path="/board/:id" element={<Board />} />
//:id -> 경로변수
주소의 뒷부분에 ? 문자열 이후 key=value로 값을 정의하며 &로 구분을 하는 형태
useLocation()
-URLSearchParams 생성자
const params = new URLSearchParams(location.search);
params.get('key1');
->value1
params.append("key3", "value3");
//추가됨
-setSearchParams();
주소를바꿈
setSearchParams("k1=v1&k2=v2");
->http://localhost:3000/board/2?k1=v1&k2=v2
-Outlet
주소를 중첩함
중복된 주소의 코드 중첩을 피할 수 있다.
import React from 'react';
import { Outlet } from 'react-router-dom';
const MainLayout = () => {
return (
<>
<header>
<h1>헤더 영역</h1>
</header>
<main>
<Outlet />
</main>
<footer>
<h1>푸터 영역</h1>
</footer>
</>
);
};
export default React.memo(MainLayout);
-> outlet만 변화함.
<Routes>
<Route path='/front' element={<MainLayout />}>
<Route index element={<Home />} />
<Route path='about' element={<About />} />
</Route>
-> index는 상위 경로와 같음.(/front)
-navigate()
파라미터가 숫자타입이라면 앞또는 뒤로 이동한다.
모든 컴포넌트를 전부 로드하는 문제 -> 초기 로딩이 느려지는 단점
해결하기위한 스플리팅
CSR
yarn add @loadable/component
npm i @loadalbe/component
const MessageBox = loadable(() => import('../components/commons/MessageBox'), {
fallback: <div>로딩중...</div>
});