<NuxtPage>
El componente <NuxtPage> es necesario para mostrar las páginas ubicadas en el directorio pages/.
<NuxtPage> es un componente incorporado que viene con Nuxt. Te permite mostrar páginas de nivel superior o anidadas ubicadas en el directorio pages/.
<NuxtPage> es un contenedor alrededor de <RouterView> de Vue Router. Debe usarse en lugar de <RouterView> porque el primero se encarga adicionalmente de los estados internos. De lo contrario, useRoute() puede devolver rutas incorrectas.
<NuxtPage> incluye los siguientes componentes:
<template>
<RouterView #default="{ Component }">
<!-- Opcional, cuando se usan transiciones -->
<Transition>
<!-- Opcional, cuando se usa keep-alive -->
<KeepAlive>
<Suspense>
<component :is="Component" />
</Suspense>
</KeepAlive>
</Transition>
</RouterView>
</template>
Por defecto, Nuxt no habilita <Transition> y <KeepAlive>. Puedes habilitarlos en el archivo nuxt.config o configurando las propiedades transition y keepalive en <NuxtPage>. Si deseas definir una página específica, puedes configurarla en definePageMeta en el componente de la página.
Si habilitas <Transition> en tu componente de página, asegúrate de que la página tenga un único elemento raíz.
Dado que <NuxtPage> utiliza <Suspense> internamente, el comportamiento del ciclo de vida del componente durante los cambios de página difiere del de una aplicación típica de Vue.
En una aplicación típica de Vue, un nuevo componente de página se monta solo después de que el anterior se haya desmontado completamente. Sin embargo, en Nuxt, debido a cómo se implementa Vue <Suspense>, el nuevo componente de página se monta antes de que el anterior se desmonte.
Props
name: indica a<RouterView>que renderice el componente con el nombre correspondiente en la opción de componentes del registro de ruta coincidente.- tipo:
string
- tipo:
route: ubicación de la ruta que tiene todos sus componentes resueltos.- tipo:
RouteLocationNormalized
- tipo:
pageKey: controla cuándo se vuelve a renderizar el componenteNuxtPage.- tipo:
stringofunction
- tipo:
transition: define transiciones globales para todas las páginas renderizadas con el componenteNuxtPage.- tipo:
booleanoTransitionProps
- tipo:
keepalive: controla la preservación del estado de las páginas renderizadas con el componenteNuxtPage.- tipo:
booleanoKeepAliveProps
- tipo:
Nuxt resuelve automáticamente el name y route escaneando y renderizando todos los archivos de componentes Vue encontrados en el directorio /pages.
Ejemplo
Por ejemplo, si pasas una clave que nunca cambia, el componente <NuxtPage> se renderizará solo una vez, cuando se monte por primera vez.
<template>
<NuxtPage page-key="static" />
</template>
También puedes usar una clave dinámica basada en la ruta actual:
<NuxtPage :page-key="route => route.fullPath" />
No uses el objeto $route aquí ya que puede causar problemas con cómo <NuxtPage> renderiza páginas con <Suspense>.
Alternativamente, pageKey puede pasarse como un valor key a través de definePageMeta desde la sección <script> de tu componente Vue en el directorio /pages.
definePageMeta({
key: route => route.fullPath
})Ref de la Página
Para obtener el ref de un componente de página, accede a él a través de 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,
})Props Personalizados
<NuxtPage> también acepta props personalizados que puedes necesitar pasar más abajo en la jerarquía.
Por ejemplo, en el siguiente ejemplo, el valor de foobar se pasará al componente NuxtPage y luego a los componentes de la página.
<template>
<NuxtPage :foobar="123" />
</template>
Podemos acceder al prop foobar en el componente de la página:
<script setup lang="ts">
const props = defineProps<{ foobar: number }>()
console.log(props.foobar) // Salida: 123
Si no has definido el prop con defineProps, cualquier prop pasado a NuxtPage aún puede ser accedido directamente desde los attrs de la página:
const attrs = useAttrs()
console.log(attrs.foobar) // Salida: 123※Esta página es una traducción no oficial de la documentación oficial de Nuxt.js.
La página correspondiente en la documentación oficial está aquí:
https://nuxt.com/docs/3.x/api/components/nuxt-page