React

[React] React Router <NavLink>를 활용한 탭 메뉴 구현하기

dev_seon 2023. 1. 4. 23:32

React Router의 공식문서를 살펴보면 <NavLink>를 아래와 같이 설명하고 있습니다.

 

A <NavLink> is a special kind of <Link> that knows whether or not it is "active". This is useful when building a navigation menu such as a breadcrumb or a set of tabs where you'd like to show which of them is currently selected.

 

의미를 살펴보면 <NavLink>는 acitve 인지 여부를 알려주는 특별한 종류의 <Link>이며, 브레드크럼 또는 현재 선택된 메뉴가 표시된 탭 메뉴와 같은 탐색 메뉴를 만들 때 유용하다는 것을 알 수 있습니다.

 

진행했던 프로젝트에서도 최상단의 탭 메뉴 중 현재 선택된 메뉴가 어떤 메뉴인지를 표시하는 기능을 구현하려 했기 때문에 <Link>가 아닌 <NavLink>를 활용하여 최상단 탭 메뉴를 구현하였습니다.

 

<NavLink> 사용 방식은 다음과 같습니다.

 

<NavLink>는 to라는 props를 통해 이동 경로를 설정할 수 있으며, active인지 표시하기 위해 props로 className이나 style을 전달할 수 있습니다.

className이나 style을 설정하기 위해 각 props에는 { isActive }라는 인자를 가지는 콜백함수를 전달해야 하는데, 이 때 isActive는 boolean type이기 때문에 true인지 false인지에 따라 다른 className 또는 style을 설정할 수 있습니다.

 

const Header = () => {
	const menus = [
		{ id: 0, menu: '면접 질문', url: '/interview/question' },
		{ id: 1, menu: '스터디모집', url: '/study' },
	];

	return (
		<HeaderContainer>
			<Link to="/">
				<LogoImg />
			</Link>
			<ul>
				{menus.map((menu) => {
					return (
						<li key={menu.id}>
							<NavLink
								to={menu.url}
								className={({ isActive }) => (isActive ? 'active' : undefined)}
							>
								{menu.menu}
							</NavLink>
						</li>
					);
				})}
			</ul>
		</HeaderContainer>
	);
};

export default Header;