Vue3 テンプレートタグ<template>


Vue3 选项式 APIVue3 オプションAPI

Vue3 では、<template>タグは非常に中核的な概念です。

<template>コンポーネントのテンプレート構造を定義するために使用され、Vue がページをレンダリングするための基盤です。


<template>タグの基本概念

<template>タグは、Vue3 でコンポーネントテンプレートを定義するために使用されるタグです。タグ自体は最終的な DOM にはレンダリングされず、Vue のテンプレート構文(補間、ディレクティブなど)を包むコンテナとして機能します。Vue は<template>内の内容から実際の HTML 構造を生成します。

特徴

  1. 非レンダリングタグ:<template>タグ自体は最終的な DOM 構造には現れません。
  2. テンプレートコンテナ:Vue のテンプレート構文(補間、条件付きレンダリング、リストレンダリングなど)を包み込むために使用されます。
  3. 複数ルートノードのサポート: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>

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>

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>

<template>タグの注意事項

  1. 動的属性はサポートされていません:<template>タグ自体は動的属性(:class 或 :styleなど)をサポートしていません。レンダリング時に無視されるためです。
  2. ネスト使用を避ける:ただし、<template>タグはネストして使用できますが、過度なネストはコードの可読性を低下させる可能性があります。
  3. と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>

Vue3 选项式 APIVue3 オプションAPI

その他の拡張