nuxt logo

Tradução da Documentação (Não Oficial)

<NuxtPage>

O componente <NuxtPage> é necessário para exibir páginas localizadas no diretório pages/.

<NuxtPage> é um componente embutido que vem com o Nuxt. Ele permite que você exiba páginas de nível superior ou aninhadas localizadas no diretório pages/.

<NuxtPage> é um invólucro em torno de <RouterView> do Vue Router. Deve ser usado em vez de <RouterView> porque o primeiro cuida adicionalmente dos estados internos. Caso contrário, useRoute() pode retornar caminhos incorretos.

<NuxtPage> inclui os seguintes componentes:

<template>
  <RouterView #default="{ Component }">
    <!-- Opcional, ao usar transições -->
    <Transition>
      <!-- Opcional, ao usar keep-alive -->
      <KeepAlive>
        <Suspense>
          <component :is="Component" />
        </Suspense>
      </KeepAlive>
    </Transition>
  </RouterView>
</template>

Por padrão, o Nuxt não habilita <Transition> e <KeepAlive>. Você pode habilitá-los no arquivo nuxt.config ou definindo as propriedades transition e keepalive em <NuxtPage>. Se você quiser definir uma página específica, pode configurá-la em definePageMeta no componente da página.

Se você habilitar <Transition> no seu componente de página, certifique-se de que a página tenha um único elemento raiz.

Como <NuxtPage> usa <Suspense> internamente, o comportamento do ciclo de vida do componente durante as mudanças de página difere de uma aplicação Vue típica.

Em uma aplicação Vue típica, um novo componente de página é montado apenas depois que o anterior foi totalmente desmontado. No entanto, no Nuxt, devido à forma como o Vue <Suspense> é implementado, o novo componente de página é montado antes que o anterior seja desmontado.

Props

  • name: informa ao <RouterView> para renderizar o componente com o nome correspondente na opção de componentes do registro de rota correspondente.
    • tipo: string
  • route: localização da rota que tem todos os seus componentes resolvidos.
    • tipo: RouteLocationNormalized
  • pageKey: controla quando o componente NuxtPage é re-renderizado.
    • tipo: string ou function
  • transition: define transições globais para todas as páginas renderizadas com o componente NuxtPage.
  • keepalive: controla a preservação do estado das páginas renderizadas com o componente NuxtPage.

O Nuxt resolve automaticamente o name e route escaneando e renderizando todos os arquivos de componentes Vue encontrados no diretório /pages.

Exemplo

Por exemplo, se você passar uma chave que nunca muda, o componente <NuxtPage> será renderizado apenas uma vez - quando for montado pela primeira vez.

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

Você também pode usar uma chave dinâmica baseada na rota atual:

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

Não use o objeto $route aqui, pois pode causar problemas com a forma como <NuxtPage> renderiza páginas com <Suspense>.

Alternativamente, pageKey pode ser passado como um valor key via definePageMeta na seção <script> do seu componente Vue no diretório /pages.

pages/my-page.vue
definePageMeta({
  key: route => route.fullPath
})
Editar e visualizar o código de exemploexamples > routing > pages

Ref da Página

Para obter o ref de um componente de página, acesse-o através de 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,
})

Props Personalizados

<NuxtPage> também aceita props personalizadas que você pode precisar passar mais adiante na hierarquia.

Por exemplo, no exemplo abaixo, o valor de foobar será passado para o componente NuxtPage e depois para os componentes de página.

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

Podemos acessar a prop foobar no componente de página:

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

console.log(props.foobar) // Saída: 123

Se você não definiu a prop com defineProps, qualquer prop passada para NuxtPage ainda pode ser acessada diretamente dos attrs da página:

pages/page.vue
const attrs = useAttrs()
console.log(attrs.foobar) // Saída: 123
Veja também guide > directory-structure > pages