Nuxt Nation カンファレンスが開催されます。11月12〜13日にご参加ください。

<NuxtLayout>

Nuxt は、ページやエラーページにレイアウトを表示するための <NuxtLayout> コンポーネントを提供します。

<NuxtLayout /> コンポーネントを使用すると、app.vue または error.vuedefault レイアウトを有効にできます。

app.vue
<template>
  <NuxtLayout>
    some page content
  </NuxtLayout>
</template>
詳しくは、ドキュメント > ガイド > ディレクトリ構造 > レイアウトをご覧ください。

プロパティ

  • name:レンダリングするレイアウト名を指定します。文字列、リアクティブな参照、または算出プロパティを指定できます。これは、layouts/ ディレクトリにある対応するレイアウトファイルの名前と一致する必要があります
    • string
    • デフォルトdefault
pages/index.vue
<script setup lang="ts">
// layouts/custom.vue
const layout = 'custom'
</script>

<template>
  <NuxtLayout :name="layout">
    <NuxtPage />
  </NuxtLayout>
</template>
レイアウト名はケバブケースに正規化されることに注意してください。したがって、レイアウトファイルの名前が errorLayout.vue の場合、<NuxtLayout />name プロパティとして渡されると error-layout になります。
error.vue
<template>
  <NuxtLayout name="error-layout">
    <NuxtPage />
  </NuxtLayout>
</template>
動的レイアウトの詳細をご覧ください。
  • fallback:無効なレイアウトが name プロパティに渡された場合、レイアウトはレンダリングされません。このシナリオでレンダリングされる fallback レイアウトを指定します。これは、layouts/ ディレクトリにある対応するレイアウトファイルの名前と一致する必要があります
    • string
    • デフォルトnull

追加プロパティ

NuxtLayout は、レイアウトに渡す必要のある追加のプロパティも受け入れます。これらのカスタムプロパティは、属性としてアクセスできるようになります。

pages/some-page.vue
<template>
  <div>
    <NuxtLayout name="custom" title="I am a custom layout">
      <-- ... -->
    </NuxtLayout>
  </div>
</template>

上記の例では、title の値は、テンプレートで $attrs.title を使用するか、custom.vue の <script setup>useAttrs().title を使用して利用できます。

layouts/custom.vue
<script setup lang="ts">
const layoutCustomProps = useAttrs()

console.log(layoutCustomProps.title) // I am a custom layout
</script>

トランジション

<NuxtLayout /> は、レイアウトトランジションをアクティブ化するために、Vue の <Transition /> コンポーネントでラップされた <slot /> を介して着信コンテンツをレンダリングします。これが期待どおりに機能するためには、<NuxtLayout /> がページコンポーネントのルート要素ではないことが推奨されます。

<template>
  <div>
    <NuxtLayout name="custom">
      <template #header> Some header template content. </template>
    </NuxtLayout>
  </div>
</template>
詳しくは、ドキュメント > はじめに > トランジションをご覧ください。

レイアウトの Ref

レイアウトコンポーネントの ref を取得するには、ref.value.layoutRef を介してアクセスします。

<script setup lang="ts">
const layout = ref()

function logFoo () {
  layout.value.layoutRef.foo()
}
</script>

<template>
  <NuxtLayout ref="layout">
    default layout
  </NuxtLayout>
</template>
詳しくは、ドキュメント > ガイド > ディレクトリ構造 > レイアウトをご覧ください。