리액트 라우터에 대해 모호하게 알고있어서 이번 기회에 개념을 알아보려고한다.
리액트 라우터는 리액트 기반의 웹 애플리케이션에서 클라이언트 측 라우팅을 관리하기 위한 네비게이션 라이브러리로, 이를 통해 웹 애플리케이션에서 페이지 간의 전환, URL 경로에 따른 컴포넌트 렌더링 등을 쉽게 처리할 수 있다.
1. 경로 매칭(Route Matching)
2. 컴포넌트 렌더링(Component Rendering)
# npm
npm install react-router-dom
# yarn
yarn add react-router-dom
Router
컴포넌트Routes
컴포넌트Route
컴포넌트path
prop을 사용하여 경로를 설정하고,element
prop을 사용하여 해당 경로에 대응하는 컴포넌트를 지정하여 렌더링한다.exact
prop을 사용하여 정확한 경로 매칭을 지정할 수 있다.import React from "react";
import { BrowserRouter as Router, Routes, Route } from "react-router-dom";
import Navigation from "./components/Navigation";
import Footer from "./components/Footer";
import Home from "pages/Home";
import About from "pages/About";
import SearchResult from "pages/SearchResult";
import Profile from "pages/Profile";
function App() {
return (
<>
<Router>
<Navigation />
<Routes>
<Route path="/" element={<Home />} />
<Route path="/about" element={<About />} />
<Route path="/search" element={<SearchResult />} />
<Route path="/profiles/:username" element={<Profile />} />
</Routes>
<Footer />
</Router>
</>
);
}
export default App;
Link
컴포넌트<a>
태그로 렌더링되며, to=''
속성을 사용하여 링크 대상 경로를 지정한다.import React from "react";
import { Link } from "react-router-dom";
const Navigation = () => {
return (
<nav>
<ul>
<li>
<Link to="/">Home</Link>
</li>
<li>
<Link to="/about">About</Link>
</li>
<li>
<Link to="/profiles">Profile</Link>
</li>
</ul>
</nav>
);
};
export default Navigation;
❓ 리액트에서
<a>
태그 대신<Link>
컴포넌트를 사용해야 하는 이유
<a>
태그는 새로운 페이지 전환이 일어날 때마다 전체 페이지를 다시 렌더링하게 되어 초기 상태부터 다시 로드되며, 그로인해 기존의 state(유저가 작성한 데이터, 또는 스크롤 위치 등)이 초기화 되는 문제가 발생한다.
- 반면에
Link
컴포넌트는 페이지 전환을 부드럽게 처리하기 위해 내부적으로 History API를 사용하기 때문에, 페이지 간 전환 시에 새로고침 없이 필요한 컴포넌트만 렌더링 되어 효율적으로 작동한다.