nuxt logo

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

Nuxt.js
Version:v3.17

<NuxtPage>

<NuxtPage> コンポーネントは、pages/ ディレクトリにあるページを表示するために必要です。

<NuxtPage> は Nuxt に組み込まれているコンポーネントで、pages/ ディレクトリにあるトップレベルまたはネストされたページを表示できます。

<NuxtPage> は Vue Router の <RouterView> のラッパーです。内部状態を追加で管理するため、<RouterView> の代わりに使用する必要があります。そうしないと、useRoute() が不正なパスを返す可能性があります。

<NuxtPage> は以下のコンポーネントを含みます:

<template>
  <RouterView #default="{ Component }">
    <!-- トランジションを使用する場合はオプション -->
    <Transition>
      <!-- keep-alive を使用する場合はオプション -->
      <KeepAlive>
        <Suspense>
          <component :is="Component" />
        </Suspense>
      </KeepAlive>
    </Transition>
  </RouterView>
</template>

デフォルトでは、Nuxt は <Transition><KeepAlive> を有効にしません。これらは nuxt.config ファイルで有効にするか、<NuxtPage>transitionkeepalive プロパティを設定することで有効にできます。特定のページを定義したい場合は、ページコンポーネント内の definePageMeta で設定できます。

ページコンポーネントで <Transition> を有効にする場合、ページに単一のルート要素があることを確認してください。

<NuxtPage> は内部で <Suspense> を使用しているため、ページ変更時のコンポーネントライフサイクルの動作は通常の Vue アプリケーションとは異なります。

通常の Vue アプリケーションでは、新しいページコンポーネントは前のものが完全にアンマウントされた後にのみマウントされます。しかし、Nuxt では、Vue の <Suspense> の実装方法により、新しいページコンポーネントは前のものがアンマウントされる前にマウントされます。

Props

  • name: <RouterView> に一致するルートレコードのコンポーネントオプションで対応する名前のコンポーネントをレンダリングするように指示します。
    • type: string
  • route: すべてのコンポーネントが解決されたルートの場所。
    • type: RouteLocationNormalized
  • pageKey: NuxtPage コンポーネントが再レンダリングされるタイミングを制御します。
    • type: string または function
  • transition: NuxtPage コンポーネントでレンダリングされるすべてのページに対するグローバルトランジションを定義します。
  • keepalive: NuxtPage コンポーネントでレンダリングされるページの状態保存を制御します。

Nuxt は /pages ディレクトリ内のすべての Vue コンポーネントファイルをスキャンしてレンダリングすることで、nameroute を自動的に解決します。

Example

例えば、変更されないキーを渡すと、<NuxtPage> コンポーネントは最初にマウントされたときにのみレンダリングされます。

app.vue
<template>
  <NuxtPage page-key="static" />
</template>

現在のルートに基づいた動的なキーを使用することもできます:

<NuxtPage :page-key="route => route.fullPath" />

ここで $route オブジェクトを使用しないでください。<NuxtPage><Suspense> でページをレンダリングする方法に問題を引き起こす可能性があります。

また、pageKey/pages ディレクトリ内の Vue コンポーネントの <script> セクションから definePageMeta を介して key 値として渡すこともできます。

pages/my-page.vue
definePageMeta({
  key: route => route.fullPath
})
サンプルコードの編集とプレビューexamples > routing > pages

Page's Ref

ページコンポーネントの ref を取得するには、ref.value.pageRef を通じてアクセスします。

app.vue
<script setup lang="ts">
const page = ref()

function logFoo () {
  page.value.pageRef.foo()
}
</script>

<template>
  <NuxtPage ref="page" />
</template>
my-page.vue
const foo = () => {
  console.log('foo method called')
}

defineExpose({
  foo,
})

Custom Props

<NuxtPage> は、階層の下位に渡す必要があるカスタムプロップも受け入れます。

例えば、以下の例では、foobar の値が NuxtPage コンポーネントに渡され、ページコンポーネントに渡されます。

app.vue
<template>
  <NuxtPage :foobar="123" />
</template>

ページコンポーネントで foobar プロップにアクセスできます:

pages/page.vue
<script setup lang="ts">
const props = defineProps<{ foobar: number }>()

console.log(props.foobar) // 出力: 123

defineProps でプロップを定義していない場合でも、NuxtPage に渡されたプロップはページの attrs から直接アクセスできます:

pages/page.vue
const attrs = useAttrs()
console.log(attrs.foobar) // 出力: 123
こちらも参照 guide > directory-structure > pages