nuxt logo

ドキュメント翻訳(非公式)

<ClientOnly>

<ClientOnly> コンポーネントを使用して、クライアントサイドでのみコンポーネントをレンダリングします。

<ClientOnly> コンポーネントは、意図的にクライアントサイドでのみコンポーネントをレンダリングするために使用されます。

デフォルトスロットの内容はサーバービルドからツリーシェイクされます。(これは、その中で使用されるCSSが初期HTMLのレンダリング時にインライン化されない可能性があることを意味します。)

Props

  • placeholderTag | fallbackTag: サーバーサイドでレンダリングされるタグを指定します。
  • placeholder | fallback: サーバーサイドでレンダリングされるコンテンツを指定します。
<template>
  <div>
    <Sidebar />
    <!-- <Comment> コンポーネントはクライアントサイドでのみレンダリングされます -->
    <ClientOnly fallback-tag="span" fallback="コメントを読み込んでいます...">
      <Comment />
    </ClientOnly>
  </div>
</template>

Slots

  • #fallback: サーバーでレンダリングされ、<ClientOnly> がブラウザでマウントされるまで表示されるコンテンツを指定します。
app/pages/example.vue
<template>
  <div>
    <Sidebar />
    <!-- これはサーバーサイドで "span" 要素をレンダリングします -->
    <ClientOnly fallbackTag="span">
      <!-- このコンポーネントはクライアントサイドでのみレンダリングされます -->
      <Comments />
      <template #fallback>
        <!-- これはサーバーサイドでレンダリングされます -->
        <p>コメントを読み込んでいます...</p>
      </template>
    </ClientOnly>
  </div>
</template>

Examples

HTML要素へのアクセス

<ClientOnly> 内のコンポーネントはマウントされた後にのみレンダリングされます。DOM内のレンダリングされた要素にアクセスするには、テンプレートリファレンスを監視することができます。

app/pages/example.vue
<script setup lang="ts">
const nuxtWelcomeRef = useTemplateRef('nuxtWelcomeRef')

// コンポーネントが利用可能になるとウォッチがトリガーされます
watch(nuxtWelcomeRef, () => {
 console.log('<NuxtWelcome /> がマウントされました')
}, { once: true })
</script>

<template>
  <ClientOnly>
    <NuxtWelcome ref="nuxtWelcomeRef" />
  </ClientOnly>
</template>