index.html)에서 동작하는 애플리케이션이다.( Server Side Rendering ) 웹 페이지의 초기 로딩 때 서버에 필요한 모든 HTML을 생성하여 브라우저로 보내주는 기술을 말한다. (서버에서 페이지를 렌더링)
사용자가 웹사이트에 접근할때, 서버에서 최종적으로 렌더링된 페이지를 전달 함으로써 클라이언트 측에서 추가적인 데이터 로딩이나 Javascript를 실행할 필요 없이 바로 페이지를 볼 수 있다.
( Client Side Rendering ) 웹 페이지를 클라이언트측 즉, 브라우저에서 렌더링하는 것이다. (클라이언트 측에서 페이지를 렌더링)
서버로부터 최소한의 구조만을 가지고있는 HTML을 받아 페이지의 실제 내용과 구조는 브라우저에서 실행되는 Javascript에 의해 동적으로 생성된다.
Routing의 중요성
npm i react-router-dom@6 #버전6 지정 설치
<BrowserRouter></BrowserRouter>
<Routes></Routes>
<Route />
<Link></Link>
<RouterProvider />
import { BrowserRouter } from "react-router-dom";
function App() {
return (
<BrowserRouter>
{/* 여기서 Routes와 Route를 사용 */}
</BrowserRouter>
);
}
path)와 연결된 컴포넌트를 지정한다.path: URL 경로element: 렌더링할 컴포넌트import { Routes, Route } from "react-router-dom";
function App() {
return (
<BrowserRouter>
<Routes>
<Route path="/" element={<Home />} />
<Route path="/about" element={<About />} />
</Routes>
</BrowserRouter>
);
}
HTML <a> 태그와 비슷하지만, 새로고침 없이 경로를 변경한다.import { Link } from "react-router-dom";
function Header() {
return (
<nav>
<Link to="/">Home</Link>
<Link to="/about">About</Link>
</nav>
);
}
import { createBrowserRouter, RouterProvider } from 'react-router-dom';
const router = createBrowserRouter([
{
path: '경로',
element: <컴포넌트 />,
},
{
path: '경로',
element: <컴포넌트 />,
},
// 더 많은 라우트 등록 가능
]);
function App() {
return (
<RouterProvider router={router} />
);
}/product/:id:id는 URL 파라미터이다.import { useParams } from "react-router-dom";
function ProductDetail() {
const { id } = useParams(); // URL의 id 값 추출
return <div>Product ID: {id}</div>;
}
그리고 파라미터는 React Router 라이브러리에서 제공하는 useParams Hook을 사용해 값을 사용할 수 있다.
react-router-dom에서 useParams를 import하고, 변수에 담아 사용한다.
import { useParams } from 'react-router-dom';
const { 파라미터명 } = useParams();
const 변수명 = useParams().파라미터명;
?key=value 형식의 쿼리를 처리한다.useSearchParams를 사용한다.useSearchParams 는 해당 쿼리스트링을 업데이트하는 함수도 반환하기 때문에 현재 URL의 쿼리스트링 값도 업데이트할 수 있다.import { useSearchParams } from "react-router-dom";
function SearchPage() {
const [searchParams, setSearchParams] = useSearchParams();
const query = searchParams.get("query"); // 'query' 파라미터 값 추출
return <div>Search Query: {query}</div>;
}
여기서 쿼리스트링의 값을 수정하는 함수의 이름은 set으로 시작한다.
그리고 특정한 key의 value를 사용하기 위해서는 searchParams.get(key)를 통해 해당 key의 value를 받을 수 있다.
useNavigate 훅을 사용하여 프로그램적으로 페이지를 이동할 수 있다.import { useNavigate } from "react-router-dom";
function Login() {
const navigate = useNavigate();
const handleLogin = () => {
// 로그인 처리 후 메인 페이지로 이동
navigate("/");
};
return <button onClick={handleLogin}>Login</button>;
}
<button onClick={() => navigate(-1)}>뒤로가기</button>
<button onClick={() => navigate("/")}>홈으로 이동하기</button>
이렇게도 사용 가능하다!
import { BrowserRouter, Routes, Route } from "react-router-dom";
import Header from "./Header";
import Home from "./Home";
import About from "./About";
import ProductDetail from "./ProductDetail";
function App() {
return (
<BrowserRouter>
<Header />
<Routes>
<Route path="/" element={<Home />} />
<Route path="/about" element={<About />} />
<Route path="/product/:id" element={<ProductDetail />} />
</Routes>
</BrowserRouter>
);
}
import { Link } from "react-router-dom";
function Header() {
return (
<nav>
<Link to="/">Home</Link>
<Link to="/about">About</Link>
</nav>
);
}
export default Header;
function Home() {
return <h1>Welcome to the Home Page</h1>;
}
export default Home;
function About() {
return <h1>About Us</h1>;
}
export default About;
import { useParams } from "react-router-dom";
function ProductDetail() {
const { id } = useParams();
return <h1>Product ID: {id}</h1>;
}
export default ProductDetail;
React Router는 SPA에서 경로에 따라 컴포넌트를 동적으로 렌더링하기 위한 필수 도구이다.
BrowserRouter, Routes, Route, Link, useParams, useNavigate 등을 활용하여 효율적인 페이지 전환과 동적 데이터 렌더링을 구현할 수 있다.