페블_
반짝이는 시냅스
페블_
전체 방문자
오늘
어제
  • 전체글 보기 (96)
    • QA (0)
    • 프로젝트 회고 (4)
    • 프로젝트 과정 기록 (12)
    • UI 구현 연구일지 (8)
    • Front-end (31)
      • Javascript (7)
      • CSS (10)
      • React (5)
      • Typescript (3)
      • Nextjs (3)
      • 스타일링 라이브러리 (3)
    • Back-end (0)
      • Express (0)
      • DB (0)
    • CS (0)
      • 자료구조 & 알고리즘 (0)
    • CI&CD (1)
    • 툴 사용법 (4)
      • Git (1)
      • Library&패키지 (2)
      • 기타 개발관련 (1)
    • 알고리즘 이론 & 풀이 (36)
      • 백준(BOJ) (14)
      • 프로그래머스 (22)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 생각
  • eslint
  • chartjs
  • emotion
  • 백준
  • 토이프로젝트
  • JS
  • UI 컴포넌트
  • 개발블로그_시작
  • react
  • storybook
  • TypeScript
  • 파이썬
  • Python
  • 알고리즘
  • 선형대수학
  • 캐러셀
  • 시리즈_표지

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
페블_

반짝이는 시냅스

Front-end/Nextjs

[Nextjs] Nextjs 시작하기 - (2) Link 설정하는 법, Navbar 만들기

2023. 8. 30. 23:46

1. Link 컴포넌트란

React에서의 Link 컴포넌트나 useNavigate처럼 페이지 간의 이동을 CRA 방식으로 부드럽게 전환할 수 있도록 도와주는 태그이다. 'next/link'로부터 import 해온다.

React에서는 react-router-dom 패키지를 따로 설치해야 했지만, nextjs는 편리하게도 자체에 이런 패키지를 내장하고 있다.

 

💡 내부 라우팅을 부드럽게 해주는 용도이기 때문에, 외부 링크로 이동할 때에는 a 태그를 이용하자!

 

Link 설정하는 법

LInk에 이동할 주소, className 등을 작성하면 된다.

target="_blank"와 같이 보통 a 링크에 작성하는 속성이 필요하다면 그대로 Link에 넣으면 된다.

import Link from 'next/link';

function NavBar() {
  return (
    <nav>
      <Link href="/" className='active'>
        Home
      </Link>
      <Link href="/">
        About
      </Link>
   </nav>
  );
}

export default NavBar;

 

Link 스타일링하는 법

nextjs 12버전에서는 Link 컴포넌트 아래에 a 태그를 작성해야 동작했지만, 13 버전부터는 a 태그를 작성하면 안된다.

그런데 이렇게 a 태그 없이 Link 태그만 작성하도록 강제하다보니 Link 태그에 스타일링을 하려고 하면 난감하다.

브라우저를 검사해보면 Link 태그는 사실 a 태그로 보이는데도, css에서 a 태그를 대상으로 스타일링하면 먹히지 않는다.

 

이럴때는 Link 태그에 legacyBehavior 속성을 추가한 다음, Link 아래에 a 태그를 넣는 이전 방식대로 작성해준다.

그러면 이렇게 추가한 a 태그를 css에서 선택하는 식으로 Link를 스타일링 할 수 있다.

import Link from 'next/link';

function NavBar() {
  return (
    <nav>
      <Link href="/" className='active' legacyBehavior>
      	<a>Home</a>
      </Link>
      <Link href="/" legacyBehavior>
        <a>About</a>
      </Link>
   </nav>
  );
}

export default NavBar;
a {
  text-decoration: none;
  color: royalblue;
}

 

2. useRouter로 Navbar에 현재 위치 표시하기

useRouter로 router 객체를 생성한 다음, pathname을 이용해 현재 페이지의 경로를 알아낼 수 있다.

이를 응용해 Navbar에서 현재 페이지와 일치하는 Link에 className을 줘서 색을 다르게 표시할 수 있다.

 

className을 여러개로 주는 방법은 아래 예시에 나온 것 처럼 두 가지가 있다.

  1. 백틱 (`)과 ${}을 이용한 템플릿 리터럴로 className 여러 개 표시
  2. class들을 배열에 담은 다음, 빈칸을 사이에 두고 join해서 하나의 문자열로 연결하는 방법
import Link from 'next/link';
import styles from './NavBar.module.css';
import { useRouter } from 'next/router';

function NavBar() {
  const router = useRouter();
  return (
    <nav>
      <Link
        href="/"
        className={`${styles.link} ${
          router.pathname === '/' ? styles.active : ''
        }`}
      >
        Home
      </Link>
      <Link
        href="/about"
        className={[
          styles.link,
          router.pathname === '/about' ? styles.active : '',
        ].join(' ')}
      >
        About
      </Link>
    </nav>
  );
}

export default NavBar;

'Front-end > Nextjs' 카테고리의 다른 글

[Nextjs] Nextjs 시작하기 - (3) css 스타일링 하는 법, Link 스타일링 하는 법  (0) 2023.09.02
[Nextjs] Nextjs 시작하기 - (1) 설치, 디렉토리 구조  (0) 2023.08.23
    'Front-end/Nextjs' 카테고리의 다른 글
    • [Nextjs] Nextjs 시작하기 - (3) css 스타일링 하는 법, Link 스타일링 하는 법
    • [Nextjs] Nextjs 시작하기 - (1) 설치, 디렉토리 구조
    페블_
    페블_

    티스토리툴바