Vue3 テンプレートタグ<template>
Vue3 では、<template>タグは非常に中核的な概念です。
<template>コンポーネントのテンプレート構造を定義するために使用され、Vue がページをレンダリングするための基盤です。
<template>タグの基本概念
<template>タグは、Vue3 でコンポーネントテンプレートを定義するために使用されるタグです。タグ自体は最終的な DOM にはレンダリングされず、Vue のテンプレート構文(補間、ディレクティブなど)を包むコンテナとして機能します。Vue は<template>内の内容から実際の HTML 構造を生成します。
特徴
- 非レンダリングタグ:
<template>タグ自体は最終的な DOM 構造には現れません。 - テンプレートコンテナ:Vue のテンプレート構文(補間、条件付きレンダリング、リストレンダリングなど)を包み込むために使用されます。
- 複数ルートノードのサポート:Vue3 では、
<template>タグは複数のルートノードを含むことができますが、Vue2 では1つしか持てません。
<template>タグの使用シーン
1. コンポーネントテンプレートの定義
単一ファイルコンポーネント(.vueファイル)では、<template>タグはコンポーネントのテンプレート部分を定義するために使用されます。例えば:
例
<template>
<div>
<h1>{{ title }}</h1>
<p>{{ description }}</p>
</div>
</template>
<script>
export default {
data() {
return {
title: "Hello Vue3",
description: "This is a Vue3 template example."
};
}
};
</script>
<div>
<h1>{{ title }}</h1>
<p>{{ description }}</p>
</div>
</template>
<script>
export default {
data() {
return {
title: "Hello Vue3",
description: "This is a Vue3 template example."
};
}
};
</script>
2. 条件付きレンダリング
<template>タグはv-if 或 v-elseディレクティブと一緒に使用することで、条件付きレンダリングを実現できます。例えば:
例
<template>
<div>
<template v-if="isVisible">
<p>This content is visible.</p>
</template>
<template v-else>
<p>This content is hidden.</p>
</template>
</div>
</template>
<script>
export default {
data() {
return {
isVisible: true
};
}
};
</script>
<div>
<template v-if="isVisible">
<p>This content is visible.</p>
</template>
<template v-else>
<p>This content is hidden.</p>
</template>
</div>
</template>
<script>
export default {
data() {
return {
isVisible: true
};
}
};
</script>
3. リストレンダリング
<template>タグはv-forディレクティブと一緒に使用することで、リストレンダリングを実現できます。例えば:
例
<template>
<ul>
<template v-for="item in items" :key="item.id">
<li>{{ item.name }}</li>
</template>
</ul>
</template>
<script>
export default {
data() {
return {
items: [
{ id: 1, name: "Apple" },
{ id: 2, name: "Banana" },
{ id: 3, name: "Orange" }
]
};
}
};
</script>
<ul>
<template v-for="item in items" :key="item.id">
<li>{{ item.name }}</li>
</template>
</ul>
</template>
<script>
export default {
data() {
return {
items: [
{ id: 1, name: "Apple" },
{ id: 2, name: "Banana" },
{ id: 3, name: "Orange" }
]
};
}
};
</script>
<template>タグの注意事項
- 動的属性はサポートされていません:
<template>タグ自体は動的属性(:class或:styleなど)をサポートしていません。レンダリング時に無視されるためです。 - ネスト使用を避ける:ただし、
<template>タグはネストして使用できますが、過度なネストはコードの可読性を低下させる可能性があります。 - と
v-slotとの連携:Vue3 では、<template>タグはスロットコンテンツを定義するためによく使用されます。例えば:
例
<template>
<MyComponent>
<template v-slot:header>
<h1>Header Content</h1>
</template>
<template v-slot:default>
<p>Default Content</p>
</template>
</MyComponent>
</template>
<MyComponent>
<template v-slot:header>
<h1>Header Content</h1>
</template>
<template v-slot:default>
<p>Default Content</p>
</template>
</MyComponent>
</template>
その他の拡張
Vue3 オプションAPI