API Components
<NuxtPage>
The NuxtPage component is required to display pages located in the pages/ directory.
<NuxtPage>
<NuxtPage>
is a built-in component that comes with Nuxt. NuxtPage
is required to display top-level or nested pages located in the pages/
directory.
NuxtPage
is a wrapper around <RouterView>
component from Vue Router. NuxtPage
component accepts same name
and route
props.
- name: type:
string
name
helps RouterView
render the component with the corresponding name in the matched route record's components option.
- route: type:
RouteLocationNormalized
route
is a route location that has all of its components resolved.
Nuxt automatically resolves the
name
androute
by scanning and rendering all Vue component files found in the/pages
directory.
Apart from the name
and route
, NuxtPage
component also accepts pageKey
props.
- pageKey: type:
string
orfunction
pageKey
helps control when the NuxtPage
component is re-rendered.
Example
For example, passing static
key, NuxtPage
component is rendered only once when it is mounted.
<!-- static key --><NuxtPage page-key="static" />
You can also use a dynamic key based on the current route. (Don't use $route
object here as it can cause problems with how <NuxtPage>
renders pages with <Suspense>
.)
<NuxtPage :page-key="route => route.fullPath" />
Alternatively, pageKey
can be passed as a key
value via definePageMeta
from the <script>
section of your Vue component in the /pages
directory.
<script setup lang="ts">definePageMeta({ key: route => route.fullPath})</script>
Accessing a page's component ref
To get the ref of a page component, access it through ref.value.pageRef
<script setup lang="ts">const page = ref()function logFoo () { page.value.pageRef.foo()}</script><template> <NuxtPage ref="page" /></template>
Custom Props
In addition, NuxtPage
also accepts custom props that you may need to pass further down the hierarchy. These custom props are accessible via attrs
in the Nuxt app.
<NuxtPage :foobar="123" />
For example, in the above example, the value of foobar
will be available using $attrs.foobar
in the template or useAttrs().foobar
in <script setup>
.