layouts

Nuxt는 공통 UI 패턴을 재사용 가능한 레이아웃으로 추출할 수 있는 레이아웃 프레임워크를 제공합니다.
최상의 성능을 위해, 이 디렉터리에 배치된 컴포넌트는 사용 시 비동기 import를 통해 자동으로 로드됩니다.

레이아웃 활성화

레이아웃은 app.vue<NuxtLayout>을 추가하여 활성화됩니다:

app/app.vue
<template>
  <NuxtLayout>
    <NuxtPage />
  </NuxtLayout>
</template>

레이아웃을 사용하려면:

  • 페이지에서 definePageMeta를 사용해 layout 속성을 설정합니다.
  • <NuxtLayout>name prop을 설정합니다.
레이아웃 이름은 케밥 케이스(kebab-case)로 정규화되므로, someLayoutsome-layout이 됩니다.
레이아웃이 지정되지 않은 경우, app/layouts/default.vue가 사용됩니다.
애플리케이션에 레이아웃이 하나만 있는 경우, 대신 app.vue를 사용할 것을 권장합니다.
다른 컴포넌트와 달리, 레이아웃은 Nuxt가 레이아웃 변경 간 전환을 적용할 수 있도록 단일 루트 요소를 가져야 하며, 이 루트 요소는 <slot />이 될 수 없습니다.

기본 레이아웃

~/layouts/default.vue를 추가합니다:

app/layouts/default.vue
<template>
  <div>
    <p>모든 페이지에서 공유되는 기본 레이아웃 콘텐츠</p>
    <slot />
  </div>
</template>

레이아웃 파일에서, 페이지의 내용은 <slot /> 컴포넌트 안에 표시됩니다.

이름이 있는 레이아웃

Directory Structure
-| layouts/
---| default.vue
---| custom.vue

그런 다음 페이지에서 custom 레이아웃을 사용할 수 있습니다:

pages/about.vue
<script setup lang="ts">
definePageMeta({
  layout: 'custom',
})
</script>
definePageMeta에 대해 더 알아보세요.

<NuxtLayout>name 속성을 사용하여 모든 페이지에 대한 기본 레이아웃을 직접 재정의할 수 있습니다:

app/app.vue
<script setup lang="ts">
// API 호출 결과나 로그인 상태에 따라 이를 선택할 수 있습니다
const layout = 'custom'
</script>

<template>
  <NuxtLayout :name="layout">
    <NuxtPage />
  </NuxtLayout>
</template>

중첩 디렉터리에 레이아웃이 있는 경우, 레이아웃 이름은 해당 경로 디렉터리와 파일 이름을 기반으로 하며, 중복된 세그먼트는 제거됩니다.

FileLayout Name
~/layouts/desktop/default.vuedesktop-default
~/layouts/desktop-base/base.vuedesktop-base
~/layouts/desktop/index.vuedesktop

명확성을 위해, 레이아웃의 파일 이름이 레이아웃 이름과 일치하도록 하는 것을 권장합니다:

FileLayout Name
~/layouts/desktop/DesktopDefault.vuedesktop-default
~/layouts/desktop-base/DesktopBase.vuedesktop-base
~/layouts/desktop/Desktop.vuedesktop
Read and edit a live example in Docs > 4 X > Examples > Features > Layouts.

레이아웃을 동적으로 변경하기

setPageLayout 헬퍼를 사용해 레이아웃을 동적으로 변경할 수도 있습니다:

<script setup lang="ts">
function enableCustomLayout () {
  setPageLayout('custom')
}
definePageMeta({
  layout: false,
})
</script>

<template>
  <div>
    <button @click="enableCustomLayout">
      Update layout
    </button>
  </div>
</template>
Read and edit a live example in Docs > 4 X > Examples > Features > Layouts.

페이지별로 레이아웃 재정의하기

페이지를 사용 중이라면, layout: false를 설정한 다음 페이지 내에서 <NuxtLayout> 컴포넌트를 사용하여 완전한 제어를 할 수 있습니다.

<script setup lang="ts">
definePageMeta({
  layout: false,
})
</script>

<template>
  <div>
    <NuxtLayout name="custom">
      <template #header>
        Some header template content.
      </template>

      The rest of the page
    </NuxtLayout>
  </div>
</template>
페이지 내에서 <NuxtLayout>을 사용하는 경우, 그것이 루트 요소가 아니도록 하세요 (또는 레이아웃/페이지 전환을 비활성화하세요).