[Next.js] Routing

2022. 6. 28. 16:01·Next.js/이론
반응형

1. a 태그

기본적인 페이지 이동을 위해서 사용하는 태그인 a 태그를 Next.js에서 사용할 수 있다. 

const NavBar = () => {
  return (
    <nav>
      <a href="/">Home</a>
      <a href="/about">About</a>
    </nav>
  );
};

export default NavBar;

페이지 이동은 정상적으로 가능하다.

하지만, React는 SPA, Single Page Application을 채택하였는데, a태그를 사용하면 페이지 이동 시 새로고침을 하게된다. 

 

이러한 문제를 해결해서 라우팅을 하기 위해서 Next.js에는 제공하는 기능이 있다. 

 

2. Link 태그 

import Link from "next/link";

const NavBar = () => {
  return (
    <nav>
      <Link href="/">
        <a>Home</a>
      </Link>
      <Link href="/about">
        <a>About</a>
      </Link>
    </nav>
  );
};

export default NavBar;

Link 태그를 사용해서 페이지를 이동할 수 있다. 

react-router-dom에서도 Link를 사용했을 텐데, next에서 제공하는 Link를 사용하면 페이지를 이동할 때

클라이언트 사이드 네비게이팅, SPA가 지켜지면서 페이지가 이동된다. 

 

3. useRouter 

import Link from "next/link";
import { useRouter } from "next/router";

const NavBar = () => {
  const router = useRouter();

  return (
    <nav>
      <Link href="/">
        <a style={{ color: router.pathname === "/" ? "red" : "blue" }}>Home</a>
      </Link>
      <Link href="/about">
        <a style={{ color: router.pathname === "/about" ? "red" : "blue" }}>
          About
        </a>
      </Link>
    </nav>
  );
};

export default NavBar;

useRouter를 사용하면 react-router-dom에서 사용하는 history, match, location 같은 기능을 모두 사용할 수 있는 

router를 사용할 수 있다. 

 

router 안에는 back, push, query, pathname 등 함수와 정보를 가지고 있다. 

 

일반적인 경우에는 Link 태그를 통해서 경로이동을 하면 되지만 next/link를 사용하기 애매한 상황 (함수로 이동) 등엔 

push를 사용하면 똑같이 이동이 가능하다. 

import { useRouter } from "next/router";

const AnyComponent = () => {
	const router = useRouter();

	const onClick = (id) => {
	    router.push(`/any/${id}`);   //  -- 1
            // or 
            router.push({
        	pathname:`/any/${id}`);  //  -- 2
                query: {
            	id,
                name: "test"
            }
            // or   
            router.push({
         	pathname:`/any/${id}`);  //  -- 3
                query: {
            	    id,
                    name: "test"
                   },
                },
                `/any/${id}`
            );
	}
    
    // ...
}
  1. 첫 번째 방법은 흔히 사용하는 push 함수의 사용법이다.
  2. 두 번째 방법은 이동할 때 String형식으로 주소를 넘겨줄 수 있지만, 객체 형식으로도 넘겨줄 수 있다. 
    pathname이 일반적인 주소 부분이며, query에 값을 넣어주면 뒤에 붙여서 넣을 수 있다. 
    화면에 주소는 " http://localhost:3000/any/123?id=123&name=test " 형식으로 이동된다. 
  3. 세 번째 방법은 ? 포함 뒤 쿼리 부분이 실제 사용자에게까진 굳이 보일 필요없을 때 마스킹 용도로 사용한다. 
    2번째 매개변수인 ` /any/${id} ` 형식으로 주소가 나타나지만 query를 가지고 오면 id와 name을 받을 수 있다. 
반응형
저작자표시 비영리 변경금지 (새창열림)

'Next.js > 이론' 카테고리의 다른 글

[Next.js] Custom App  (1) 2022.07.01
[Next.js] Styles JSX  (2) 2022.06.30
[Next.js] CSS 모듈  (1) 2022.06.29
[Next.js] Next.js 세팅 및 구성 설명  (1) 2022.06.27
[Next.js] Next.js 란?  (1) 2022.06.26
'Next.js/이론' 카테고리의 다른 글
  • [Next.js] Styles JSX
  • [Next.js] CSS 모듈
  • [Next.js] Next.js 세팅 및 구성 설명
  • [Next.js] Next.js 란?
잉여개발자
잉여개발자
풀스택 개발자를 목표로 잉여롭게 개발 공부도 하면서 다양한 취미 생활도 즐기고 있는 잉여 개발자입니다.
  • 잉여개발자
    잉여로운 개발일지
    잉여개발자
    • 분류 전체보기 (789)
      • 개발정보 (36)
      • 개발환경 (7)
      • 개발생활 (19)
      • React (141)
        • 이론 (23)
        • 기능 (12)
        • 실험실 (88)
        • 버그 (6)
        • 패스트캠퍼스 (9)
        • Npm (3)
      • React Native (28)
        • 공통 (6)
        • TypeScript (3)
        • JavaScript (18)
        • 버그 (1)
      • Next.js (30)
        • 이론 (13)
        • 실험실 (13)
        • 버그 (3)
      • Web (35)
      • 알고리즘 (202)
        • 풀이 힌트 (39)
      • JavaScript (47)
      • TypeScript (29)
        • 기초 (27)
        • 실험실 (2)
      • Node.js (13)
        • 이론 (0)
        • 기능 (3)
        • 실험실 (9)
        • 버그 (1)
      • 도커 (4)
      • CCNA (22)
        • 이론 (4)
        • 문제 (18)
      • 취미생활 (167)
        • 잉여로운 칵테일 (2)
        • 잉여의 식물키우기 (130)
        • 잉여로운 여행기 (11)
        • 잉여의 제2외국어 (21)
        • 잉여로운 책장 (2)
      • Java (1)
        • Java의 정석 (1)
      • 꿀팁 공유 (3)
  • 태그

    typescript
    ReactNative
    영어독학
    타일러영어
    리얼클래스
    next.js
    리얼학습일기
    식물
    Babel
    ChatGPT
    CSS
    react
    Node.js
    바질
    javascript
    덤프
    리액트
    자바스크립트
    redux
    webpack
    프로그래머스
    네이버 부스트캠프
    타입스크립트
    네트워크
    다이소
    CCNA
    Docker
    알고리즘
    영어회화
    바질 키우기
  • hELLO· Designed By정상우.v4.10.1
잉여개발자
[Next.js] Routing
상단으로

티스토리툴바