웹 프로그래밍

[React] NavLink

스히 2025. 1. 1. 18:49

 

 Link 

  • 라우터 내에서 직접적으로 페이지 이동을 하고자 할 때 사용되는 컴포넌트
  • html의 <a> 태그와 비슷한 역할을 한다
import React from 'react';
import {Link} from 'react-router-dom';

function Nav(){
  return (
    <div>
      <Link to='/'> Home </Link>
      <Link to='/about'> About </Link>
    </div>
  );
}

export default Nav;

 

 

 NavLink 

  • <Link>와 거의 동일한 기능을 하지만, 현재 라우트 경로와 일치 여부를 판단하여 스타일 혹은 클래스를 추가할 수 있게 해준다
  • ex) 네비게이션 바 구현 시, 현재 선택된 메뉴에 특수한 스타일을 주기 위해 사용한다.
<NavLink
  to="/about"
  style={({ isActive }) => ({
    fontWeight: isActive ? "bold" : "normal",
    textDecoration: isActive ? "underline" : "none",
  })}
>
  어바웃
</NavLink>

 

 


 

 

NavLink를 좀 사용해봐야겠다!!

 

일단 내 기존 네비게이션 바 코드

 

import React from "react";
import { Link, useLocation } from "react-router-dom";

const Menu: React.FC = () => {
  const location = useLocation(); // 현재 경로 확인

  // 현재 위치 메뉴 색상
  const realPriceStyle =
    location.pathname.startsWith("/realprice_map") && "text-primary-1 ";
  const charterStyle =
    location.pathname.startsWith("/charters") &&
    !location.pathname.startsWith("/charters/college") &&
    "text-primary-1 ";
  const boardStyle =
    location.pathname.startsWith("/board") && "text-primary-1 ";
  const dormitoryStyle =
    (location.pathname.startsWith("/dormitory") ||
      location.pathname.startsWith("/charters/college")) &&
    "text-primary-1 ";

  return (
    <div className="hidden xl:flex pt-0.5">
      <Link to="/realprice_map">
        <div
          className={`mx-4 cursor-pointer hover:text-primary ${realPriceStyle}`}
        >
          실거래가 조회
        </div>
      </Link>
      <Link to="/charters">
        <div
          className={`mx-4 cursor-pointer hover:text-primary ${charterStyle}`}
        >
          월세/전세가 조회
        </div>
      </Link>
      <Link to="/dormitory">
        <div
          className={`mx-4 cursor-pointer hover:text-primary ${dormitoryStyle}`}
        >
          기숙사와 비교하기
        </div>
      </Link>
      <Link to="/board">
        <div className={`mx-4 cursor-pointer hover:text-primary ${boardStyle}`}>
          공지사항
        </div>
      </Link>
    </div>
  );
};

export default Menu;

 

 

 

NavLink를 사용하니 이렇게나 간단하게 바꿀 수 있었다고 한다...

 

 

import { NavLink } from "react-router-dom";

const Menu = () => {
  return (
    <>
      <NavLink
        to="/realprice_map"
        className={({ isActive }) =>
          isActive ? "cursor-pointer text-primary-1" : "cursor-pointer hover:text-primary"
        }
      >
        실거래가 조회
      </NavLink>
      <NavLink
        to="/charters"
        className={({ isActive }) =>
          isActive ? "cursor-pointer text-primary-1" : "cursor-pointer hover:text-primary"
        }
      >
        월세/전세가 조회
      </NavLink>
      <NavLink
        to="/dormitory"
        className={({ isActive }) =>
          isActive ? "cursor-pointer text-primary-1" : "cursor-pointer hover:text-primary"
        }
      >
        기숙사와 비교하기
      </NavLink>
      <NavLink
        to="/board"
        className={({ isActive }) =>
          isActive ? "cursor-pointer text-primary-1" : "cursor-pointer hover:text-primary"
        }
      >
        공지사항
      </NavLink>
    </>
  );
};

export default Menu;