본문 바로가기

Study/NextJS 공식문서

[2주 차] Layout and Template

Layout

폴더에 layout.tsx을 추가하면 여러 경로간에 공유되는, page.tsx를 감싸는 레이아웃 UI를 그릴 수 있게 된다. 이는 중첩될 수 있다. 최상위 디렉토리에 선언된 layout.tsx는 루트 레이아웃이라고 하는데, 모든 경로에 적용되며 html과 body 태그를 필수로 포함한다. 

export default function RootLayout({
  children,
}: {
  children: React.ReactNode
}) {
  return (
    <html lang="en">
      <body>
        {/* Layout UI */}
        <main>{children}</main>
      </body>
    </html>
  )
}
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>
  )
}

 

Template

템플릿은 각 자식 레이아웃이나 페이지를 래핑한다는 점에서 레이아웃과 유사하다. 하지만 경로간에 지속되고 상태를 유지하는 레이아웃과 달리 페이지를 이동하면 새 인스턴스를 만든다. 즉, 경로가 변경되면 새 인스턴스가 마운트되고 DOM 요소가 다시 생성되고 상태가 유지되지 않는다.

export default function Template({ children }: { children: React.ReactNode }) {
  return <div>{children}</div>
}

 

Metadata

App 디렉토리에서는 기본 제공 SEO를 사용하여 제목 및 메타 등의 <head> HTML 요소를 수정할 수 있다. 메타데이터는 layout.tsx, page.tsx에서 메타데이터 객체를 내보내거나 generateMetadata 함수를 사용하여 정의할 수 있다.
import { Metadata } from 'next'
 
export const metadata: Metadata = {
  title: 'Next.js',
}
 
export default function Page() {
  return '...'
}

'Study > NextJS 공식문서' 카테고리의 다른 글

[2주 차] Loading UI and Streaming  (0) 2025.01.11
[2주 차] Linking and Navigating  (0) 2025.01.10
[2주 차] Defining Routes  (0) 2025.01.10
[1주 차] 프로젝트 구조  (0) 2025.01.05
[1주 차] 설치하기  (0) 2025.01.05