728x90
728x90
<Link> 컴포넌트와 <NavLink> 컴포넌트 비교 (React Router)
들어가며
- 리액트 라우터(React Router)에서
<Link>
컴포넌트와<NavLink>
컴포넌트의 차이점에 대해 정리해본다.

<Link> 컴포넌트
개념
- 리액트 라우터에서 제공하는 가장 기본적인 링크(Link) 컴포넌트
- 특정 경로로 이동할 수 있는 내비게이션 링크를 생성한다.
- HTML의
<a>
태그와 유사하지만, 페이지 새로고침 없이 SPA(Single Page Application) 내에서 라우팅을 처리한다.
특징
- 페이지를 새로 고침하지 않고, 클라이언트 측 라우팅을 수행한다.
- 단순한 라우팅에 적합하다.
- 선택된 상태에 따른 스타일링 기능은 없다.
사용 예시 코드
import { Link } from "react-router-dom"; function App() { return ( <div> <Link to="/">Home</Link> <Link to="/about">About</Link> </div> ); }
<LavLink> 컴포넌트
개념
<Link>
컴포넌트의 확장형으로, 활성화 상태(Active State)를 처리하는 기능이 추가되었다.- 현재 경로와 링크 경로가 일치하면, 기본적으로
active
클래스가 추가된다. - 따라서 내비게이션 링크의 활성화 상태를 스타일링할 수 있다.
특징
- 현재 URL 경로와 비교하여 링크가 활성화되었는지 판단한다.
className
이나style
을 동적으로 설정할 수 있는 콜백 함수(Callback Function)를 지원한다.- 주로 내비게이션 메뉴를 구성할 때 사용한다.
주요 Props
to
: 이동할 경로 (필수)className
: 활성화 상태에 따라 동적 클래스를 적용할 수 있는 속성style
: 활성화 상태에 따라 동적 스타일을 적용할 수 있는 속성end
: 경로가 완전히 일치할 때만 활성화되도록 설정
부모 경로(/dashboard
)와 하위 경로(/dashboard/profile
,/dashboard/wallets
등)가 모두 활성화 상태로 간주되지 않도록 하려면,<NavLink>
컴포넌트에end
Prop을 설정해주면 된다.
사용 예시 코드
import { NavLink } from "react-router-dom"; function App() { return ( <nav> <NavLink to="/" end> {({ isActive }) => ( <span style={{ color: isActive ? 'red' : 'blue' }}>Home</span> )} </NavLink> <NavLink to="/about" className={({ isActive }) => isActive ? 'active-link' : ''}> About </NavLink> </nav> ); }
<NavLink>
컴포넌트는<Link>
컴포넌트와 유사하나, 링크의 활성화 상태(Active State)를 처리해줄 수 있다는 차이점이 있다.
참고 사이트
Link | React Router
reactrouter.com
NavLink | React Router
reactrouter.com
React Router Dom v6 shows active for index as well as other subroutes
<Route path='/dashboard' element={<Navbar />}> <Route index element={<Home />} /> <Route path='profile' element={<Profile />} /> <Route path='w...
stackoverflow.com
728x90
728x90
'Programming > React' 카테고리의 다른 글
[React.js] 폼(Form) 처리 방법 (React 19) (0) | 2025.01.21 |
---|---|
[React.js] React Hook Form 라이브러리 (0) | 2024.11.23 |
[React.js] 객체 표기법(Object Notation) 방식과 빌더 콜백 표기법(Builder Callback Notation) 방식 (0) | 2024.11.13 |
[React.js] .js 파일에서 Uncaught SyntaxError: Unexpected token '<' 오류 발생할 때 해결 방법 (Vite) (0) | 2024.11.13 |
[React.js] 리덕스(Redux), 리덕스 툴킷(Redux Toolkit) (0) | 2024.11.11 |
[React.js] 모든 웹 브라우저에서 공통된 HTML 요소 스타일이 보여지도록 설정하는 방법 (normalize.css) (0) | 2024.11.07 |
[React.js] Recharts 라이브러리 (1) | 2024.11.06 |
[React.ts] PropsWithChildren (0) | 2024.11.05 |