nuxt logo

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

Nuxt.js
Version:v3.17

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

Examples

HTML要素へのアクセス

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

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>