즉, 웹서버에 여러개의 파일을 가지고 있는 어플리케이션(=MPA)
예를들어 현재 보고 있는 blog 페이지에서 다른 페이지로 이동하기 위해 링크를 누른다면
정리하자면 새로운 페이지로 렌더하기 위해서 기존 페이지는 모두 제거하고 새로운 페이지를 처음부터 다시 렌더
정리하자면, React App은 모든 요소가 다 컴포넌트로 이루어져 있기 때문에 페이지 이동시 변화가 필요한 컴포넌트만 요청 컴포넌트로 교체
npm install react-router-dom
BrowseRouter
로 App
컴포넌트를 감싸주면, App컴포넌트의 모든 자식 컴포넌트들이 현재 브라우저의 주소를 감지하고 저장해서 사용할 수 있음BrowseRouter
가 루트 컴포넌트 역할을 하고, 그 안에는 state를 이용해서 현재의 location 정보를 보관하고 있음일치하는 path를 찾아서 해당 컴포넌트를 라우팅 시킴
즉, /search
와 경로가 일치한다면 Search
컴포넌트로 이동시킴
pathname에 /search로 잘 저장되어 있음
<div>
<Link to={"/"}>Home</Link>
<Link to={"/search"}>Search</Link>
<Link to={"/country"}>Country</Link>
</div>
<a href={"/"}>Home</a>
<a href={"/search"}>Search</a>
<a href={"/country"}>Country</a>
함수
를 반환 const nav = useNavigate();
const onClick = () => {
nav("/search");
};
return (
<button onClick={onClick}>서치페이지로 이동</button>
);
?{이름}={값}
형태로 동적인 값을 전달/{값}
형태로 동적인 데이터를 전달import React from "react";
import { useSearchParams } from "react-router-dom";
const Search = () => {
const [searchParams, setSearchParams] = useSearchParams();
return <div>Search {searchParams.get("q")}</div>;
};
export default Search;
q=
뒤에 다른 문자를 쓴다면 그 문자가 화면에 출력됨<Route path="/country/:code" element={<Country />} />
import { useParams } from "react-router-dom";
const Country = () => {
const params = useParams();
return <div>Country : {params.code}</div>;
};
export default Country;
useParams를 params 변수로 선언
params안에는 객체 형태로 code가 저장되어 있음
왜 code냐면, 위에서 path에 :code
라고 지정했기 때문임
따라서 :code
없이 바로 /country경로로 접속하면 NotFound 페이지로 이동