Next.js Beta Docs 번역

[Data Fetching] (3) Pages and Layouts Next.js Beta Docs

2023. 5. 1. 06:38
목차
  1. Pages and Layouts
  2. Pages
  3. Layouts
  4. Root Layout
  5. Nesting Layouts
  6. Templates
  7. Modifying <head>

https://beta.nextjs.org/docs/routing/pages-and-layouts
위 문서에 대한 번역을 진행합니다.

번역시점은 2023-05-01로 공식문서의 추가적인 업데이트가 있을 수 있습니다.
번역기와 챗지피티에 의존해서 번역하고있습니다.
번역체를 자연스러운 어투로 옮기는 과정에서 오역이 발생할 수 있는 점 미리 알립니다.
한글로 번역하는 것이 더 어색한 단어의 경우 원문을 먼저 표기하겠습니다.
 
역자의 개인적인 의견에 대한 내용은

이 안에서 이루어집니다.

Pages and Layouts

이 글을 읽기 전에 라우팅에 대한 기본 사항과 정의를 먼저 읽어보시는 것을 권해드려요

Next.js 13의 app 라우터에는 pages, shared layouts(공유 레이아웃) , template을 쉽게 만들 수 있는 새로운 파일 규칙이 도입되었습니다.

이 페이지에서는 Next.js 애플리케이션에서 이런 특수 파일들을 사용하는 방법을 안내해드립니다!

 

Pages

page는 경로의 unique(고유한) UI입니다. page.js 파일에서 컴포넌트를 내보내 페이지를 정의할 수 있습니다.

중첩 폴더를 사용하여 경로를 정의하고 page.js 파일을 사용하여 경로를 공개적으로 액세스할 수 있도록 합니다.

app directory에 page.js파일을 추가하는 것을 통해 당신의 첫번째 페이지를 만들어보세요!

Good to know

페이지는 항상 경로 하위 트리의 leaf(리프)입니다.
page에는 .js, .jsx, .tsx 확장자를 사용할 수 있습니다.
경로 세그먼트에 공개적으로 액세스하려면 page.js 파일이 필요합니다.
페이지는 기본적으로는 서버 컴포넌트 이지만 클라이언트 컴포넌트로 설정하는 것도 가능합니다.
페이지는 데이터를 가져올 수 있습니다. 자세한 내용은 데이터 페칭 섹션을 참고하세요

Layouts

layout 은 여러페이지 간에 공유되는 UI입니다.

탐색에서 레이아웃은 상태를 보존하고 리렌더링을 하지 않으며 중첩될 수 있습니다.

레이아웃은 기본적으로 layout.js 파일에서 react 컴포넌트를 내보내는 것을 통해 정의할 수 있습니다.

컴포넌트는 렌더링 중에 자식 레이아웃 또는 자식 페이지로 채워질 자식 프로퍼티를 받아들여야합니다.

app/dashboard/layout.tsx

export default function DashboardLayout({
  children, // will be a page or nested layout
}: {
  children: React.ReactNode,
}) {
  return (
    <section>
      {/* Include shared UI here e.g. a header or sidebar */}
      <nav></nav>

      {children}
    </section>
  );
}

가장 위에 있는 layout을 Root layout이라고 불러요 root layout은 required(필수)입니다.
이 root layout은 애플리케이션의 모든 페이지에서 공유되며
HTML 및 body 태그가 포함되어야해요

모든 경로 세그먼트는 선택적으로 자체 레이아웃을 정의할 수 있습니다.
이러한 레이아웃은 해당 세그먼트의 모든 페이지에서 공유됩니다.

경로의 레이아웃은 기본적으로 중첩됩니다. 각 부모 레이아웃은 react 자식 프로퍼티를 사용하여
그 아래의 자식 레이아웃을 감싸줍니다.

라우트 그룹을 사용하여 공유 레이아웃 안팎에서 특정 라우트 세그먼트를 선택할 수 있습니다.

레이아웃은 기본적으로 서버 컴포넌트이지만 클라이언트 컴포넌트로 설정하는 것도 가능합니다.

레이아웃은 데이터를 불러올 수 있습니다. 자세한 내용은 data fetching 섹션을 참고하세요!

상위 레이아웃과 하위 레이아웃 간에는 데이터를 전달할 수 없습니다.
하지만 경로에서 동일한 데이터를 두번 이상 가져올 수 있으며 React는 성능에 영향을 주지 않으면서 중복된 요청을 자동으로 제거합니다.

레이아웃에는 .js, .jsx, .tsx 확장자를 사용할 수 있습니다.

layout.js와 page.js 파일을 같은 폴더에 정의할 수 있으며 레이아웃이 페이지를 감싸게 됩니다.

 

Root Layout

루트 레이아웃은 앱디렉토리의 root에서 정의되며 모든 경로에 적용됩니다.

이 레이아웃을 사용하면 서버에서 반환된 초기 HTML을 수정할 수 있습니다.

Good to know

app 디렉토리에는 루트레이아웃이 포함되어야 합니다.

Next.js가 자동으로 생성해주지 않기 때문에 loot layout에서 html과 body 태그를 정의해줘야합니다.
기본 제공되는 seo support를 이용하여 head elements를 작성할 수 있습니다(title같은)

route groups을 사용해서 여러개의 root layout을 만들 수 있습니다. 예시를 참고하세요!

root layout은 기본적으로 서버 컴포넌트이고 클라이언트 컴포넌트로 설정할 수 없습니다.

Nesting Layouts

폴더 내에 정의된 레이아웃은 특정 경로 세그먼트에서 적용되며

해당 세그먼트가 활성화 될 때 렌더링됩니다.

기본적으로 파일 계층 구조의 레이아웃은 중첩되어 있기때문에 children prop을 통해 children 레이아웃을 감싸줍니다.

위의 두 레이아웃을 결합하면 루트 레이아웃이 대시보드 레이아웃을 감싸는 형태가 됩니다.

대시보드 레이아웃은 app/dashboard 안에 중첩된 경로의 레이아웃을 또 감싸게됩니다.

이렇게 두 레이아웃은 중첩됩니다!(사진참고)

Route Groups을 사용하여 공유 레이아웃 안팎에서 특정 경로 세그먼트를 선택할 수도 있습니다.

 

Templates

템플릿은 각 하위 레이아웃 또는 페이지를 래핑한다는 점에서 레이아웃과 유사합니다.

경로 전체에서 지속되고 상태를 유지하는 레이아웃과 달리 템플릿은 탐색 시 각 하위 레이아웃에 대해 새 인스턴스를 생성합니다.

즉 사용자가 템플릿을 공유하는 경로 사이를 탐색할 때 컴포넌트의 새 인스턴스가 마운트되고

DOM 요소가 다시 생성되며 / 상태는 보존되지 않고 / 효과가 다시 synchronized 됩니다.

 

특정 동작이 필요한 경우에는 layout보다 template이 더 적합할 수 있어요

-CSS 또는 animation 라이브러리를 사용하여 애니메이션을 시작/ 종료하는 경우

-useEffect, useState에 의존하는 경우(ex : 페이지별 피드백 양식)

- 기본 프레임워크의 동작을 변경하는 경우(예를들어 레이아웃 내부의 suspense Boundaries는 layout을 처음 로드할때만 fallback을 표시하고 페이지를 전환할 때는 표시하지 않지만 템플릿의 경우 각 탐색에 fallback이 표시됨)

Recommendation
템플릿을 사용해야할 특별한 이유가 없다면 레이아웃을 쓰는게 좋습니다.

템플릿은 template.js 파일에서 기본 React 컴포넌트를 내보내서 정의할 수 있어요

컴포넌트는 중첩된 세그먼트가 될 children 프로퍼티를 허용해야합니다.

레이아웃과 탬플릿이 있는 경로 세그먼트의 렌더링된 출력을 다음과 같습니다.

역주 : 레이아웃이 템플릿을 감싸고 템플릿이 페이지를 감싸는 구조가 된다는 걸 말하는 듯함.

Modifying <head>

app directory에서 기본 제공하는 SEO 지원을 사용해서 title, meta 등 <head> 태그에서 사용하는 HTML 요소들을 수정할 수 있습니다.

metadata는 메타데이터 객체를 내보내거나 layout.js , page.js 파일에서 generateMetadata함수를 사용하여 정의할 수 있습니다.

export const metadata = {
  title: 'Next.js'
};

export default function Page() {
  return '...'
}
Good to know
root layout에 title, meta와 같은 head 태그를 수동으로 추가하면 안됩니다.
대신 head 요소의 스트리밍 및 중복제거와 같은 고급 요구 사항을 자동으로 처리하는 메타데이터 API를 사용해야합니다.
역주 : 이전에는 head.js 파일을 이용해 head 태그 안의 내용물들을 적용해주었는데
이 부분을 metadata 객체를 정의하는 것으로 대체하라는 의미입니다.
반응형
저작자표시 비영리 (새창열림)

'Next.js Beta Docs 번역' 카테고리의 다른 글

[Data Fetching] (6) ErrorHandling Next.js Beta Docs  (0) 2023.05.03
[Data Fetching] (5) LoadingUI Next.js Beta Docs  (0) 2023.05.02
[Data Fetching] (4) Linking and Navigating Next.js Beta Docs  (0) 2023.05.01
[Data Fetching] (2) Data Fetching Next.js Beta Docs  (0) 2023.05.01
[Data Fetching] (1) Fundamentals Next.js Beta Docs  (0) 2023.05.01
  1. Pages and Layouts
  2. Pages
  3. Layouts
  4. Root Layout
  5. Nesting Layouts
  6. Templates
  7. Modifying <head>
'Next.js Beta Docs 번역' 카테고리의 다른 글
  • [Data Fetching] (5) LoadingUI Next.js Beta Docs
  • [Data Fetching] (4) Linking and Navigating Next.js Beta Docs
  • [Data Fetching] (2) Data Fetching Next.js Beta Docs
  • [Data Fetching] (1) Fundamentals Next.js Beta Docs
냠냠맨
냠냠맨
프론트엔드 개발 전반을 다루는 기술 블로그입니다.
React와 TypeScript를 좋아하는 개발자프론트엔드 개발 전반을 다루는 기술 블로그입니다.
냠냠맨
React와 TypeScript를 좋아하는 개발자
냠냠맨
전체
오늘
어제
  • all category (433)
    • CMC (0)
    • best (11)
    • 년간회고 (1)
    • cheetsheet (15)
    • 프로젝트 회고 (3)
    • 서평 (3)
    • SEO Study (1)
    • 프로젝트 진행기 (10)
    • testcode (9)
    • yarnberry (7)
    • css (21)
    • typescript (15)
    • redux (7)
    • react (43)
    • Next.js (9)
    • Nestjs (3)
    • javascript (44)
    • programmers (67)
    • leetcode (41)
    • frontend (41)
    • backjoon (1)
    • Next.js Beta Docs 번역 (12)
    • TIL (15)
      • html (3)
    • Network (12)
      • 간단 정리 시리즈 (2)
      • 질답 준비 (0)
    • 자료구조와 알고리즘 (2)
    • CS (4)
      • OS (1)
    • 취업준비 (2)
    • zoom websocket (2)
    • talk (6)
    • 면접대비 (1)
    • 코드스테이츠 프론트 (5)
    • 간헐적 회고 (17)

블로그 메뉴

  • leetcode
  • programmers
  • javascript
  • html
  • css

공지사항

인기 글

태그

  • border말풍선
  • 개발자
  • JavaScript
  • 프론트엔드
  • 주니어개발자
  • 테오의스프린트
  • teosprint
  • LeetCode
  • frontend
  • 말풍선
  • 개발
  • 테오의스프린트17기
  • CSS
  • 코드스테이츠 #프론트엔드

최근 댓글

최근 글

hELLO · Designed By 정상우.
냠냠맨
[Data Fetching] (3) Pages and Layouts Next.js Beta Docs
상단으로

티스토리툴바

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.