Vue3 v-cloak ディレクティブ
v-cloakディレクティブは、コンポーネントインスタンスの準備が完了するまで、未コンパイルのテンプレートを非表示にするために使用されます。
基本説明
v-cloakこのディレクティブは、DOM テンプレートを使用する際の「未コンパイルテンプレートのちらつき」問題を解決するために使用されます。ユーザーがページにアクセスすると、元の{{ }}mustache タグが表示されることがあります。Vue コンポーネントがマウントされ、コンテンツをレンダリングするまで。
v-cloak関連するコンポーネントインスタンスのマウントが完了するまで、要素上に保持されます。CSS ルールと組み合わせることで、この期間中に元のテンプレートを非表示にできます。
- 期待される型: なし(式は受け付けません)
- 効果コンポーネントの準備が完了するまで、未コンパイルのテンプレートを非表示にします。
注意: このディレクティブは、ビルドステップがない設定でのみ必要です。
基本的な使い方
使用するv-cloak場合は、CSS ルールを組み合わせる必要があります:
例
[v-cloak] {
display: none;
}
例
{{ message }}
</div>
コンパイルが完了すると、v-cloak属性は自動的に要素から削除され、要素が表示されます。
使用場面
v-cloak主に以下の場面で使用されます:
1、CDN で Vue を導入する
CDN を使って Vue を導入し、ビルドステップがない場合、ページの読み込みと Vue スクリプトの読み込みの間の短い時間に、テンプレートがまだコンパイルされていないことがあります:
例
<html>
<head>
<script src="https://unpkg.com/vue@3/dist/vue.global.js"></script>
<style>
[v-cloak] {
display: none;
}
</style>
</head>
<body>
<div id="app">
<div v-cloak>
{{ message }}
</div>
</div>
<script>
const { createApp } = Vue
createApp({
data() {
return {
message: 'Hello Vue!'
}
}
}).mount('#app')
</script>
</body>
</html>
2、複雑なテンプレート構造
複数のデータバインディングを含む複雑なテンプレートでは、v-cloak を使用すると、ユーザーが未レンダリングのコンテンツを見るのを防ぐことができます:
例
<h1>{{ title }}</h1>
<p>ようこそ、{{ username }}</p>
<ul>
<li v-for="item in items" :key="item.id">
{{ item.name }}
</li>
</ul>
</div>
v-cloak の動作原理
- ページ読み込み時、Vue はまだ初期化されておらず、要素上に
v-cloak属性が存在します - CSS ルール
[v-cloak] { display: none; }がこれらの要素を非表示にします - Vue が初期化され、テンプレートをコンパイルし、リアクティブデータを作成します
- コンポーネントのマウント後、Vue は自動的に
v-cloak属性を削除します - 要素が表示され、レンダリングされた内容が表示されます。
注意事項
ビルドステップがないシナリオでのみ使用します: ビルドツール(Vite、Webpack など)を使用する場合、テンプレートはビルド段階で既にコンパイルされているため、v-cloak を使用する必要はありません。
例
/* CSS を head に置くことを推奨します */
<head>
<style>
[v-cloak] {
display: none;
}
</style>
</head>
CSS と組み合わせて使用する必要があります: v-cloak 自体はコンテンツを非表示にしません。CSS ルールと組み合わせて初めて有効になります。
モダンなビルドツールとの違い
モダンなビルドツール(Vite など)を使用する場合、v-cloak を使用する必要はありません。理由は次のとおりです:
- テンプレートはビルド段階で事前にコンパイルされます
- JavaScript はバンドル後にインライン化または非同期で読み込まれます
- 初期 HTML には未コンパイルのテンプレート構文が含まれていません
したがって、v-cloak は主に従来の CDN 導入方式やシンプルな HTML ページのシナリオで使用されます。
その他の拡張
Vue3 組み込みディレクティブ