繰り返し(v-for) - Vue.js

  • 作成日:
  • 最終更新日:2025/06/25

指定された回数繰り返す

指定された回数返すには、以下のように指定します。

<タグ v-for="変数 in 繰り返す回数">繰り返し表示する部分</タグ>
<!DOCTYPE html>
<html>
  <head>
    <title><%= title %></title>
    <script src="https://unpkg.com/vue@3/dist/vue.global.js"></script>
  </head>
  <body>
    <div id="app">
      <p v-for="i in 10">{{ i }}</p>
    </div>

    <!-- Vue アプリケーション -->
    <script>
      const { createApp } = Vue;

      createApp({
        data: function(){
          return {
            show: ""
          };
        }
      }).mount('#app');
    </script>
  </body>
</html>

配列の値を取り出す

<!DOCTYPE html>
<html>
  <head>
    <title><%= title %></title>
    <script src="https://unpkg.com/vue@3/dist/vue.global.js"></script>
  </head>
  <body>
    <div id="app">
      <ul>
        <li v-for="item in fruits">{{ item }}</li>
      </ul>
    </div>

    <!-- Vue アプリケーション -->
    <script>
      const { createApp } = Vue;

      createApp({
        data: function(){
          return {
            fruits: ["apple", "orange", "banana"]
          };
        }
      }).mount('#app');
    </script>
  </body>
</html>

配列とインデックス番号を取得するには、以下のようにします。

<li v-for="(item, idx) in fruits">{{ idx }}:{{ item }}</li>

配列の中のオブジェクトの値を取得

<!DOCTYPE html>
<html>
  <head>
    <title><%= title %></title>
    <script src="https://unpkg.com/vue@3/dist/vue.global.js"></script>
  </head>
  <body>
    <div id="app">
      <ul>
        <li v-for="(item, idx) in members">{{ idx }}:{{ item.name }}, {{ item.age }}</li>
      </ul>
    </div>

    <!-- Vue アプリケーション -->
    <script>
      const { createApp } = Vue;

      createApp({
        data: function(){
          return {
            members: [
              { name: "Taro", age: 20 },
              { name: "Jiro", age: 18 }
            ]
          };
        }
      }).mount('#app');
    </script>
  </body>
</html>

v-for と v-if の組み合わせ

Vue 3 の仕様上、v-if と v-for を同じ要素に同時に使うと一部バグや警告が出ることがあります。「template タグを使って分離する」ことで問題を回避できます。

v-if と v-for を同じ要素で使うと、処理の優先順序が問題になるため、template タグで v-for を切り出すことを推奨しています。

<!DOCTYPE html>
<html>
  <head>
    <title><%= title %></title>
    <script src="https://unpkg.com/vue@3/dist/vue.global.js"></script>
  </head>
  <body>
    <div id="app">
      <ul>
        <template v-for="item in members">
          <li v-if="item.age == 20">{{ item.name }}</li>
        </template>
      </ul>
    </div>

    <!-- Vue アプリケーション -->
    <script>
      const { createApp } = Vue;

      createApp({
        data: function(){
          return {
            members: [
              { name: "Taro", age: 20 },
              { name: "Jiro", age: 18 },
              { name: "Hanako", age: 18 },
            ]
          };
        }
      }).mount('#app');
    </script>
  </body>
</html>