<NuxtPage>
<NuxtPage> コンポーネントは、pages/ ディレクトリにあるページを表示するために必要です。
<NuxtPage>
は Nuxt に組み込まれているコンポーネントで、app/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>
の transition
と keepalive
プロパティを設定してください。特定のページを定義したい場合は、ページコンポーネントの definePageMeta
で設定できます。
ページコンポーネントで <Transition>
を有効にする場合、ページに単一のルート要素があることを確認してください。
<NuxtPage>
は内部で <Suspense>
を使用しているため、ページ変更時のコンポーネントライフサイクルの挙動が通常の Vue アプリケーションとは異なります。
通常の Vue アプリケーションでは、新しいページコンポーネントは前のコンポーネントが完全にアンマウントされた 後にのみ マウントされます。しかし、Nuxt では、Vue の <Suspense>
の実装方法により、新しいページコンポーネントは前のコンポーネントがアンマウントされる 前に マウントされます。
Props
name
:<RouterView>
に一致するルートレコードのコンポーネントオプションで対応する名前のコンポーネントをレンダリングさせます。- type:
string
- type:
route
: すべてのコンポーネントが解決されたルートの場所。- type:
RouteLocationNormalized
- type:
pageKey
:NuxtPage
コンポーネントが再レンダリングされるタイミングを制御します。- type:
string
またはfunction
- type:
transition
:NuxtPage
コンポーネントでレンダリングされるすべてのページに対するグローバルトランジションを定義します。- type:
boolean
またはTransitionProps
- type:
keepalive
:NuxtPage
コンポーネントでレンダリングされるページの状態保持を制御します。- type:
boolean
またはKeepAliveProps
- type:
Nuxt は /pages
ディレクトリ内のすべての Vue コンポーネントファイルをスキャンしてレンダリングすることで、name
と route
を自動的に解決します。
Example
例えば、変更されないキーを渡すと、<NuxtPage>
コンポーネントは最初にマウントされたときにのみレンダリングされます。
<template>
<NuxtPage page-key="static" />
</template>
現在のルートに基づいた動的なキーを使用することもできます:
<NuxtPage :page-key="route => route.fullPath" />
ここで $route
オブジェクトを使用しないでください。<NuxtPage>
が <Suspense>
を使用してページをレンダリングする方法に問題を引き起こす可能性があります。
また、pageKey
は /pages
ディレクトリ内の Vue コンポーネントの <script>
セクションから definePageMeta
を介して key
値として渡すこともできます。
definePageMeta({
key: route => route.fullPath
})
Page's Ref
ページコンポーネントの ref
を取得するには、ref.value.pageRef
を通じてアクセスします。
<script setup lang="ts">
const page = ref()
function logFoo () {
page.value.pageRef.foo()
}
</script>
<template>
<NuxtPage ref="page" />
</template>
const foo = () => {
console.log('foo method called')
}
defineExpose({
foo,
})
Custom Props
<NuxtPage>
は、階層をさらに下に渡す必要があるカスタムプロップも受け取ります。
例えば、以下の例では、foobar
の値が NuxtPage
コンポーネントに渡され、その後ページコンポーネントに渡されます。
<template>
<NuxtPage :foobar="123" />
</template>
ページコンポーネントで foobar
プロップにアクセスできます:
<script setup lang="ts">
const props = defineProps<{ foobar: number }>()
console.log(props.foobar) // 出力: 123
defineProps
でプロップを定義していない場合でも、NuxtPage
に渡されたプロップはページの attrs
から直接アクセスできます:
const attrs = useAttrs()
console.log(attrs.foobar) // 出力: 123
※このページは Nuxt.js 公式ドキュメントの翻訳ページ(非公式)です。
公式ドキュメントの該当ページはこちら:
https://nuxt.com/docs/4.x/api/components/nuxt-page