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)를 처리해줄 수 있다는 차이점이 있다.
참고 사이트
728x90
728x90
'Programming > React' 카테고리의 다른 글
[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 |
[React.js] const Component vs. function Component (2) | 2024.11.04 |