favicon

Jayden { do: smite }

240403(수)

🌱 성장일지 11.0

행복한 이기주의자(웨인 다이어)의 내용에 자극받아 시작하는 소박한 성장기록

  • 살아있는 꽃과 죽은 꽃은 어떻게 구별하는가?
  • 성장하고 있는 것이 살아 있는 것이다.
  • 생명의 유일한 증거는 성장이다!

(11.0) 어떤 제약 없이 편하게 기록하고 남기자.

React

  • react-router-dom 으로 라우팅

Next.js

  • 라우팅을 위한 js 코드를 작성하지 않음
  • 특별한 폴더에 컴포넌트 파일을 작성한다.
  • 프로젝트의 폴더 구조를 라우팅으로 가져간다.

pages 폴더를 확인

/pages/index.js ⇒ home/ 으로 인식

/pages/about.js ⇒ home/about

index 파일만 해당 폴더 자체를 라우팅으로 갖는다.

/pages/products/index.js ⇒ home/products

/pages/products/[id].js ⇒ 동적 경로를 다룬다. home/products/1(2, 3, 4 등등)

위의 방식 자체가 File-based Routing

page 역할을 하는 파일은 export default로 내보낸다.

pages 폴더 내에서 about.js를 만들면 이 파일명 자체가 라우팅 주소가 된다.

혹은 폴더를 만들고 그 안에 index.js를 만들면 해당 폴더 이름을 가진 주소가 라우팅된다. 여러 세그먼트로 이뤄진 경로를 설정할 때, 폴더를 만든다. 그런데 portfolio/list 경로의 페이지를 만들고 싶으면 portfolio를 폴더로 만들고 그 안에 list 파일을 둬야할 수 밖에 없다.

동적 경로!

portfolio가 여러개라면

/portfolio/[id].js 를 하면 된다.(id가 아닌 다른 문자열도 된다.)

대괄호가 있는 동적파일보다 정적파일을 우선시한다.

id 값을 가져와서 사용하려면 어떻게 해야할까?

`import { useRouter } from 'next/router'로 할 수 있다.

만약 class 컴포넌트를 사용한다면 withRouter로 컴포넌트를 감싸서

라우터 프로퍼티를 컴포넌트에 주입할 수 있다.

const router = useRouter(); console.log(router.pathname); console.log(router.query); // { id: 123 } 과 같은 객체가 나온다

대괄호를 가진 폴더이름

clients

  • index.js
  • [id]
    • index.js
    • [clientproject].js (클라이언트 별로 다른 프로젝트들이 있을 수 있으니까)

마찬가지로 [clientproject].js 파일에서

const router = useRouter(); console.log(router.pathname); console.log(router.query); // { id: jayden, clientprojectid: 123 } 과 같은 객체가 나온다

Catch-All 라우트

blog

  • […slug].js ⇒ slug가 아니어도 되긴 함!

이렇게 하면 blog/2020도 blog/2020/12 도 blog/2020/12/16 도 다 잡을 수 있다.

[…slug.js] 파일에서 아래와 같이 하고 ‘/blog/2020/12’ 를 가면

const router = useRouter(); console.log(router.pathname); console.log(router.query); // { slug: ['2020', '12'] } 가 나온다.

Link 컴포넌트로 네비게이팅하기

브라우저에 url을 입력하기만 하는 네비게이팅은 사실상 거의 없음

  • 링크를 타고 가든가
  • 특정 행동에 따라 가든가

anchor 태그를 사용해서

<a href="/portfolio">ㅎㅎㅎ</a>

위와 같이 해도 잘 동작한다. 그렇지만 이 방법은 새로운 페이지를 불러오기 위해 새로고침하는 것과 동일

즉, 앱 상에서의 state가 휘발되어버린다.

import Link from 'next/link';

Link 컴포넌트에는 몇가지 꼼수가 있다.

  • 링크에 마우스를 올리자마자 미리 링크로 이동할 곳에서의 데이터 패칭을 한다든지 등등
  • replace: 새로운 페이지로 띄움
  • href: 네비게이팅하려는 path

Link href를 설정하는 다른 방법

<Link href={{ pathname: '/clients/[id]', query: { id: client.id }, }} > {client.name} </Link>

프로그래밍 방식(코드 상에서)으로 네비게이팅하기

보통은 버튼을 만들고 네비게이팅하는 액션을 onclick에 주는 것보다 그냥 Link를 사용하는 걸 추천한다. 그런데 어떤 데이터를 로드하고 네비게이팅한다든지 어떤 작업을 할 때 사용한다.

const router = useRouter(); router.push('path');

404 페이지 추가하기

pages/404.js 만들면 된다.

function NotFoundPage() { return ( <div> <h1>Page not found!</h1> </div> ); }

File based routing vs Code based routing

File based routing

  • 라우팅에 대해 추가로 작성해야할 코드가 없다.
  • 라우팅에 대해 직관적이다.
  • file과 folder 만으로 라우팅 관리가 된다.

Code based Routing

  • 라우팅에 대한 보일러 플레이트가 필요하다.(파일 시스템을 안보고 이 코드만 보면 파악된다. 이게 편리할 수도 있다.)
  • 익혀두면 직관적이다.(처음엔 귀찮지만)
  • file과 folder 구조에 의존하지 않아도 된다.

Copyright 2023. all rights reserved by Jayden