<ClientOnly>
Renderizar componentes apenas no lado do cliente com o componente <ClientOnly>.
O componente <ClientOnly>
é usado para renderizar um componente intencionalmente apenas no lado do cliente.
O conteúdo do slot padrão será removido da build do servidor. (Isso significa que qualquer CSS usado por componentes dentro dele pode não ser incluído ao renderizar o HTML inicial.)
Props
placeholderTag
|fallbackTag
: especifica uma tag a ser renderizada no lado do servidor.placeholder
|fallback
: especifica um conteúdo a ser renderizado no lado do servidor.
<template>
<div>
<Sidebar />
<!-- O componente <Comment> será renderizado apenas no lado do cliente -->
<ClientOnly fallback-tag="span" fallback="Carregando comentários...">
<Comment />
</ClientOnly>
</div>
</template>
Slots
#fallback
: especifica um conteúdo a ser renderizado no servidor e exibido até que<ClientOnly>
seja montado no navegador.
pages/example.vue
<template>
<div>
<Sidebar />
<!-- Isso renderiza o elemento "span" no lado do servidor -->
<ClientOnly fallbackTag="span">
<!-- este componente será renderizado apenas no lado do cliente -->
<Comments />
<template #fallback>
<!-- isso será renderizado no lado do servidor -->
<p>Carregando comentários...</p>
</template>
</ClientOnly>
</div>
</template>
Exemplos
Acessando Elementos HTML
Componentes dentro de <ClientOnly>
são renderizados apenas após serem montados. Para acessar os elementos renderizados no DOM, você pode observar uma referência de template:
pages/example.vue
<script setup lang="ts">
const nuxtWelcomeRef = useTemplateRef('nuxtWelcomeRef')
// O watch será acionado quando o componente estiver disponível
watch(nuxtWelcomeRef, () => {
console.log('<NuxtWelcome /> montado')
}, { once: true })
</script>
<template>
<ClientOnly>
<NuxtWelcome ref="nuxtWelcomeRef" />
</ClientOnly>
</template>
※Esta página é uma tradução não oficial da documentação oficial do Nuxt.js.
A página correspondente na documentação oficial está aqui:
https://nuxt.com/docs/3.x/api/components/client-only