nuxt logo

ドキュメント翻訳(非公式)

Nuxt.js
Version:v3.17

<NuxtLayout>

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

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

app.vue
<template>
  <NuxtLayout>
    some page content
  </NuxtLayout>
</template>
こちらも参照 guide > directory-structure > layouts

Props

  • name: レンダリングするレイアウト名を指定します。文字列、リアクティブな参照、または計算プロパティにすることができます。これはlayouts/ディレクトリ内の対応するレイアウトファイルの名前と一致している必要があります
    • type: string
    • default: 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>
こちらも参照 guide > directory-structure > layouts
  • fallback: 無効なレイアウトがnameプロップに渡された場合、レイアウトはレンダリングされません。このシナリオでレンダリングされるfallbackレイアウトを指定します。これはlayouts/ディレクトリ内の対応するレイアウトファイルの名前と一致している必要があります
    • type: string
    • default: null

Additional Props

NuxtLayoutは、レイアウトに渡す必要がある任意の追加プロップも受け入れます。これらのカスタムプロップは属性としてアクセス可能になります。

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

上記の例では、titleの値はテンプレート内で$attrs.titleを使用するか、<script setup>内でuseAttrs().titleを使用してカスタム.vueで利用可能になります。

layouts/custom.vue
const layoutCustomProps = useAttrs()

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

Transitions

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

<template>
  <div>
    <NuxtLayout name="custom">
      <template #header> Some header template content. </template>
    </NuxtLayout>
  </div>
</template>
こちらも参照 getting-started > transitions

Layout's 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>
こちらも参照 guide > directory-structure > layouts