html은 딱 하나를 가지고 있지만, SPA도 브라우저 주소창대로 다른 페이지를 보여줄 수 있다.
이렇게 브라우저 주소에 따라 다른 페이지를 보여주는 걸 라우팅이라고 부른다.
주소에 맞는 컴포넌트를 렌더링 해주는 라이브러리
yarn add react-router-dom
import React from "react";
import ReactDOM from "react-dom";
import "./index.css";
import App from "./App";
import reportWebVitals from "./reportWebVitals";
import { BrowserRouter } from "react-router-dom";
ReactDOM.render(
<BrowserRouter>
<App />
</BrowserRouter>,
document.getElementById("root")
);
사용법1
<Route path="/" exact>
<Home></Home>
</Route>
사용법2
// App.js
<Route path="/cat" component={Cat} />
이 경우, history객체를 사용 할 수 있다.
// Cat.js
const Cat = (props) => {
console.log(props);
return (
<div
onClick={() => {
props.history.push("/dog");
}}
>
Cat
</div>
);
};
export default Cat;
<Link to="/">메인으로 가기</Link>
<Link to="/dog">dog로 가기</Link>
<Route path="/">
<Home></Home>
</Route>
<Route path="/dog">
<Dog></Dog>
</Route>
home으로 가기 링크를 누르면 내가 지정한 컴포넌트가 나온다.
그런데 dog로 가기 링크를 누르면
home컴포넌트도 같이 나온다.
왜냐하면 /dog라는 주소에는 /가 속해 있기 때문이다.
그럴 때는 exact를 사용한다.
<Link to="/">메인으로 가기</Link>
<Link to="/dog">dog로 가기</Link>
<Route path="/" exact>
<Home></Home>
</Route>
<Route path="/dog">
<Dog></Dog>
</Route>
정확히 주소가 일치하는 컴포넌트만 보여준다.
<Switch>
<Route path="/">
<Home></Home>
</Route>
<Route path="/cat" component={Cat} />
<Route path="/dog">
<Dog></Dog>
</Route>
</Switch>
그런데 주소가 /cat인데도 home컴포넌트를 보여주고 있다.
이럴 땐 path가 /인 라우트에 exact를 적용 하면 된다.
Switch의 또 다른 사용법은
사용자가 지정된 주소 이외의 주소로 들어 왔을 때 사용할 수 있다.
<Switch>
<Route path="/" exact>
<Home></Home>
</Route>
<Route path="/cat" component={Cat} />
<Route path="/dog">
<Dog></Dog>
</Route>
<Route>
<NotFound></NotFound>
</Route>
</Switch>