동적 라우팅이란 Routes의 경로에 특정 값을 넣어 해당 페이지로 이동할 수 있게 하는 것을 말합니다. 예를 들어, /product/1이라는 경로는 1번 상품의 상세 페이지를 보여주고, /product/2라는 경로는 2번 상품의 상세 페이지를 보여주는 식입니다. 이렇게 하나의 컴포넌트에서 다양한 페이지를 보여줄 수 있도록 하는 것이 동적 라우팅의 장점입니다.
react-router-dom을 사용한 동적 라우팅 구현하기
React에서 동적 라우팅을 구현하기 위해서는 react-router-dom이라는 라이브러리를 사용해야 합니다. 이 라이브러리는 React에서 웹 애플리케이션의 네비게이션을 쉽게 만들어주는 기능을 제공합니다. react-router-dom을 사용하려면 다음과 같이 설치해야 합니다.
npm install react-router-dom
설치가 완료되면, 다음과 같은 컴포넌트들을 사용할 수 있습니다.
BrowserRouter: 웹 애플리케이션의 최상위 컴포넌트로, HTML5 히스토리 API를 사용하여 페이지 전환을 처리합니다.
Route: 특정 경로에 해당하는 컴포넌트를 렌더링합니다. path와 component라는 속성을 받습니다.
Switch: 여러 개의 Route 중 하나만 렌더링하도록 합니다. 가장 처음 매칭되는 Route만 보여줍니다.
Link: 클릭하면 다른 경로로 이동할 수 있는 링크를 만듭니다. to라는 속성에 이동할 경로를 지정합니다.
useParams: 동적 라우팅에서 경로에 있는 특정 값을 가져올 수 있는 훅입니다. 예를 들어, /product/:id라는 경로에서 id값을 가져올 수 있습니다.
다음은 간단한 예제 코드입니다.
import React from "react";
import { BrowserRouter, Route, Switch, Link, useParams } from "react-router-dom";
// 메인 페이지 컴포넌트
function Main() {
return (
<div>
<h1>메인 페이지</h1>
<ul>
<li>
<Link to="/product/1">1번 상품</Link>
</li>
<li>
<Link to="/product/2">2번 상품</Link>
</li>
<li>
<Link to="/product/3">3번 상품</Link>
</li>
</ul>
</div>
);
}
// 상세 페이지 컴포넌트
function Detail() {
// useParams 훅을 사용하여 id 값을 가져옵니다.
const { id } = useParams();
return (
<div>
<h1>{id}번 상품의 상세 페이지</h1>
<p>이 상품은 {id}번 상품입니다.</p>
<Link to="/">메인으로 돌아가기</Link>
</div>
);
}
// 앱 컴포넌트
function App() {
return (
// BrowserRouter 컴포넌트로 감싸줍니다.
<BrowserRouter>
{/* Switch 컴포넌트로 감싸줍니다. */}
<Switch>
{/* Route 컴포넌트로 경로와 컴포넌트를 지정합니다. */}
{/* 동적 라우팅을 위해 :id라는 값을 넣어줍니다. */}
<Route path="/product/:id" component={Detail} />
{/* 메인 페이지는 exact 속성을 주어 정확히 일치하는 경우에만 렌더링하도록 합니다. */}
<Route path="/" exact component={Main} />
</Switch>
</BrowserRouter>
);
}
export default App;
이렇게 하면, 메인 페이지에서 각각의 상품 링크를 클릭하면 해당하는 상세 페이지로 이동할 수 있습니다. 또한, 상세 페이지에서는 useParams 훅을 사용하여 id값을 가져와서 화면에 보여줄 수 있습니다.
이번 글에서는 React에서 동적 라우팅을 구현하는 방법에 대해 알아보았습니다. 동적 라우팅은 웹 애플리케이션에서 자주 사용되는 기능이므로, 잘 익혀두면 좋을 것 같습니다 react-router-dom 라이브러리에는 다른 유용한 컴포넌트와 훅들도 많이 있으니, 공식 문서를 참고하시기 바랍니다.
'개발' 카테고리의 다른 글
최근 Node.js에서 보안, 인증관련 주요 이슈 (0) | 2023.06.06 |
---|---|
React 컴포넌트 라이브러리 소개와 간단 사용법 (0) | 2023.06.06 |
Node.js 에서 사용되는 인기 웹 프레임워크들을 소개합니다. (0) | 2023.06.05 |
Node.js를 활용한 데이터베이스 연동과 쿼리 작성법 (0) | 2023.06.02 |
React로 구현하는 반응형 UI 디자인과 레이아웃 (0) | 2023.06.01 |