사용자가 요청한 url에따라 해당 url에 맞는 페이지를 보여주는 것이다. 리액트는 라이브러리이기에 UI를 그리는 기능만 있어서 react-router를 설치해서 routing 기능을 사용한다.
Router.js로 프로젝트 내에 컴포넌트들에 대한 경로를 관리한다. 사용자가 입력한 주소를 감지하는 역할을 하며 여러 환경에서 동작할 수 있도록 여러 종류의 라우터 컴포넌트를 제공한다.
경로 이동 방법은 Link컴포넌트와 useNavigate hook을 사용한다.
BrowserRouter
컴포넌트 : 주소 변경에 대해 다양한 편의 기능을 제공해준다. 대표적인 기능으로는 페이지가 새로 고침되지 않아도 주소 변경이 가능하게 해주는 기능이 있다.Routes
컴포넌트 : 여러 Route를 감싸서 그 중 규칙이 일치하는 라우트를 랜더링 시켜주는 역할을 한다.Route
컴포넌트 : 규칙을 설정할 수 있는 컴포넌트이다. 속성으로는 path와 element을 가지고 있다. path는 경로를 설정하는 속성이고, element는 설정한 경로로 이동했을 때 어떤 컴포넌트를 보여줄지 결정하는 속성이다.
<Route path = "주소규칙" element = {보여주고싶은 컴포넌트 /} />>
const Router = () => {
<BrowserRouter>
<Routes>
<Route path='/' element={<Login />} />;
<Route path='/main' element={<Main />} />;
</Routes>
</BrowserRouter>;
};
export default Router;
header와 footer같은 경우는 페이지 변환과는 상관없이 계속 화면에 표시되어야 한다. 그럴 경우에는 Routes
컴포넌트 밖에 입력해준다.
const Router = () => {
<BrowserRouter>
⭐️<Route path='/Nav' element={<Nav />}></Route>
<Routes>
<Route path='/' element={<Login />} />;
<Route path='/main' element={<Main />} />;
</Routes>
⭐️<Route path='/Footer' element={<Footer />}></Route>
</BrowserRouter>;
};
export default Router;
그럼 결과적으로 Nav
와 Footer
컴포넌트는 어떤 경로가 오더라도 항상 화면에 보여지게 된다.
리액트에서는 <a href="..."></a>
대신 Link
컴포넌트를 사용한다.
이유는 a태그
는 주소를 이동시키면서 아예 새로운 페이지를 가져오는데 그렇게되면 리액트 앱이 지니고 있는 상태들이 초기화되고 랜더링 된 컴포넌트들도 사라지게되어 새로 랜더링 하게 되기때문이다.
Link
컴포넌트는 브라우저의 주소만 바꿀뿐 페이지를 새로 불러오지는 않는다. 또 실제 화면에서 바뀌어야하는 부분만 새로 랜더링 되기때문에 a태그
를 사용하는 것보다 효율적이다.
a태그
는 외부사이트로 이동할 때 주로 사용한다.
<Link to = "/Login"> 소개 </Link>
Link
컴포넌트는 특정 주소로 이동하는 태그이지만 useNavigate
는 특정 행동을 했을 때 특정 주소로 이동시켜주는 hook이다.
로그인 버튼 클릭시에 백엔드 api로 데이트럴 전송하는 작업 후 페이지를 이동하거나 인증/인가가 필요한 경우 그리고 작업 이후 응답 메세지에 따른 분기처리를 해야 하는 상황일 때 useNavigate
를 사용하는게 좋다.
import React from 'react';
⭐️ import { useNavigate } from 'react-router-dom'; // 1
const Login = () => {
⭐️ const navigate = useNavigate(); // 2
const goToMain = () => { // 3
⭐️ navigate('/main');
};
return (
⭐️ <button className="loginBtn" onClick={goToMain}> // 4
로그인
</button>
);
};
export default Login;
useNavigate
를 import 해준다.useNavigate
함수를 실행하고, 해당 함수가 반환한 결과를 navigate
라는 변수에 할당한다. 여기서의 반환값은 페이지를 이동하는 함수이기 때문에 navigate
의 변수는 페이지를 이동하는 함수가 된다.navigate
의 인자로는 경로를 넣어준다.onClick
이벤트를 생성하고 실행될 함수를 넣어준다.