[React] Link to="" vs <a href=""> 차이점과 오류 해결 방법 (with Router)
React에서 페이지 이동을 구현할 때 두 가지 방법이 있다.
하나는 Link to="", 다른 하나는 <a href="">를 사용하는 것이다.
둘 다 링크를 통해 페이지를 이동하는 역할을 하지만, 동작 방식에는 중요한 차이가 있다.
이번 글에서는 Link to=""와 <a href="">의 차이점을 알아보고,
React 프로젝트에서 Link를 사용할 때 발생하는 오류의 원인과 해결 방법까지 함께 살펴보자!
1. Link to="" vs <a href=""> 차이점
1-1. <a href=""> 태그: 일반적인 HTML 방식
우리가 일반적으로 알고 있는 <a> 태그는 HTML에서 링크를 연결하는 기본적인 방법이다.
<a href="/about">About 페이지로 이동</a>
이렇게 작성하면 브라우저가 해당 페이지로 이동하면서 전체 페이지가 새로고침된다.
즉, 새로운 요청을 보내 서버에서 새로운 HTML 파일을 받아와 렌더링하는 방식이다.
이 방식은 정적인 웹사이트에서는 문제가 없지만, React 같은 SPA(Single Page Application) 환경에서는 비효율적이다.
페이지 이동이 발생할 때마다 전체 애플리케이션을 다시 불러오기 때문에 불필요한 리렌더링과 성능 저하가 발생할 수 있다.
1-2. Link to="": React Router 방식
React에서는 <a> 태그 대신 react-router-dom 라이브러리에서 제공하는 Link를 사용한다.
jsx
복사편집
import { Link } from "react-router-dom";
<Link to="/about">About 페이지로 이동</Link>
이렇게 작성하면 주소(URL)만 변경되고, 기존 컴포넌트가 유지된 상태에서 필요한 부분만 다시 렌더링된다.
즉, 새로운 요청 없이 클라이언트 측에서 동적으로 페이지를 변경하는 방식이다.
정리하자면?
구분 <a href=""> Link to=""
| 방식 | 브라우저가 전체 페이지 새로고침 | 클라이언트 측에서 URL만 변경 |
| 성능 | 불필요한 리렌더링 발생 | 필요한 부분만 렌더링 (SPA 최적화) |
| 사용 예 | 정적인 HTML, 서버 사이드 렌더링(SSR) | React SPA 프로젝트 |
2. Link 사용 시 발생할 수 있는 오류와 해결 방법
React 프로젝트에서 Link를 사용할 때, 특정 상황에서 오류가 발생할 수 있다.
대표적으로 "Cannot destructure property 'basename' of 'React.useContext(...)' as it is null" 에러가 나타날 수 있다.
이 오류는 Link가 Router 컴포넌트 내부에서 사용되지 않을 때 발생한다.
즉, Link를 사용하려면 반드시 BrowserRouter 또는 Router로 감싸야 한다!
⚠️ 잘못된 코드 (오류 발생)
import { Link } from "react-router-dom";
function Header() {
return (
<div>
<Link to="/">홈</Link>
</div>
);
}
이렇게 작성하면 Link가 라우터 컨텍스트 없이 사용되었기 때문에 오류가 발생한다.
✨ 올바른 코드 (Router로 감싸기)
import { BrowserRouter as Router, Route, Routes } from "react-router-dom";
import Home from "./pages/Home";
import About from "./pages/About";
import Header from "./components/Header";
function App() {
return (
<Router>
<Header /> {/* Router 안에서 사용해야 오류가 발생하지 않음! */}
<Routes>
<Route path="/" element={<Home />} />
<Route path="/about" element={<About />} />
</Routes>
</Router>
);
}
export default App;
이렇게 Router 내부에서 Link를 사용하면 오류 없이 정상적으로 동작한다.
3. 결론: 언제 Link를 쓰고, 언제 <a>를 써야 할까?
상황 Link to="" 사용 <a href=""> 사용
| React Router로 페이지 이동할 때 | ✅ | ❌ |
| 외부 사이트로 이동할 때 (ex. Google, GitHub) | ❌ | ✅ |
| 전체 페이지 새로고침이 필요한 경우 | ❌ | ✅ |
- React 프로젝트에서 내부 페이지를 이동할 때는 Link to=""를 사용하자!
- 외부 사이트로 이동할 때는 <a href="">를 사용하면 된다.
React 프로젝트에서 Link를 올바르게 사용하면 페이지 이동이 빠르고 부드러워지며, 불필요한 리렌더링을 방지할 수 있다.