Create React App(CRA)에 특별히 routing을 위한 로직이 들어있지 않기 때문에 가장 인기 있는routing solution인 react-router를 추가해서 routing을 구현
npm install react-router-dom --save
import React from "react";
import { BrowserRouter, Routes, Route } from "react-router-dom";
import Nav from "./components/Nav/Nav";
import Footer from "./components/Footer/Footer";
import Login from "./pages/Login/Login";
import Signup from "./pages/Signup/Signup";
import Main from "./pages/Main/Main";
function Router() {
return (
<BrowserRouter>
<Nav />
<Routes>
<Route path="/" element={<Login />} />
<Route path="/signup" element={<Signup />} />
<Route path="/main" element={<Main />} />
</Routes>
<Footer />
</BrowserRouter>
);
}
export default Router;
ReactDOM.render(<Router />, document.getElementById('root'));
<Router />
로 변경해야 한다.Route 이동하는 방법은 두 가지가 있다.
<Link />
컴포넌트 사용<Link />
import React from "react";
import { Link } from "react-router-dom";
function Login() {
return (
<div>
<Link to="/signup">회원가입</Link>
</div>
);
}
export default Login;
<Link />
컴포넌트를 사용하는 방법이다.<Link />
컴포넌트는 DOM에서 <a>
로 변환(Compile)된다.<a>
vs <Link />
컴포넌트도 지정한 경로로 바로 이동시켜주는 기능을 한다.<a>
- 외부 사이트로 이동하는 경우<Link />
- 프로젝트 내에서 페이지 전환하는 경우import React from "react";
import { useNavigate } from "react-router-dom";
function Login() {
const navigate = useNavigate();
const goToMain = () => {
navigate("/main");
};
// 실제 활용 예시
// const goToMain = () => {
// if(response.message === "valid user"){
// navigate('/main');
// } else {
// alert("가입된 회원이 아닙니다. 회원가입을 먼저 해주세요.")
// navigate('/signup');
// }
// }
return (
<div>
<button className="loginBtn" onClick={goToMain}>
로그인
</button>
</div>
);
}
export default Login;
<Link />
를 사용하지 않고 함수 호출을 통해 페이지를 이동하는 방법도 있다.<Link />
useNavigate