Dev to webs {Coding…}

เรียนรู้การพัฒนาซอฟเวอร์ เพื่อความรู้ที่ยั่งยืน

บทที่ 8: การวนลูปข้อมูลด้วย v-for ใน Vue.js

1. v-for คืออะไร?

v-for เป็น Directive ใน Vue.js ที่ใช้สำหรับการวนลูปข้อมูล เช่น Array, Object หรือแม้แต่จำนวนตัวเลข เพื่อแสดงผลรายการข้อมูลซ้ำ ๆ ใน HTML


2. การใช้งาน v-for กับ Array

ตัวอย่างพื้นฐาน:

<template>
  <div>
    <h1>Fruits List</h1>
    <ul>
      <li v-for="(fruit, index) in fruits" :key="index">
        {{ index + 1 }}. {{ fruit }}
      </li>
    </ul>
  </div>
</template>

<script>
export default {
  data() {
    return {
      fruits: ['Apple', 'Banana', 'Cherry']
    };
  }
};
</script>

ผลลัพธ์:

  • Apple
  • Banana
  • Cherry

คำอธิบาย:

  • v-for="(fruit, index) in fruits" ใช้วนลูปผ่าน Array
  • index เป็นค่าดัชนีของ Array
  • :key="index" ใช้เพื่อเพิ่มประสิทธิภาพใน DOM

3. การใช้งาน v-for กับ Object

ตัวอย่าง:

<template>
  <div>
    <h1>User Details</h1>
    <ul>
      <li v-for="(value, key) in user" :key="key">
        {{ key }}: {{ value }}
      </li>
    </ul>
  </div>
</template>

<script>
export default {
  data() {
    return {
      user: {
        name: 'John Doe',
        age: 30,
        email: '[email protected]'
      }
    };
  }
};
</script>

ผลลัพธ์:

คำอธิบาย:

  • v-for="(value, key) in user" ใช้เพื่อวนลูปผ่าน Object
  • key แสดงชื่อ Property ใน Object

4. การใช้งาน v-for กับช่วงตัวเลข

ตัวอย่าง:

<template>
  <div>
    <h1>Numbers</h1>
    <ul>
      <li v-for="number in 5" :key="number">
        {{ number }}
      </li>
    </ul>
  </div>
</template>

<script>
export default {
  data() {
    return {};
  }
};
</script>

ผลลัพธ์:

  • 1
  • 2
  • 3
  • 4
  • 5

คำอธิบาย:

  • v-for="number in 5" จะวนลูป 5 รอบ โดย number มีค่าตั้งแต่ 1 ถึง 5

5. การใช้ v-for ซ้อนกัน

ตัวอย่าง:

<template>
  <div>
    <h1>Table of Items</h1>
    <table border="1">
      <tr v-for="(row, rowIndex) in table" :key="rowIndex">
        <td v-for="(cell, cellIndex) in row" :key="cellIndex">
          {{ cell }}
        </td>
      </tr>
    </table>
  </div>
</template>

<script>
export default {
  data() {
    return {
      table: [
        ['A1', 'A2', 'A3'],
        ['B1', 'B2', 'B3'],
        ['C1', 'C2', 'C3']
      ]
    };
  }
};
</script>

ผลลัพธ์:

A1A2A3
B1B2B3
C1C2C3

คำอธิบาย:

  • v-for สามารถซ้อนกันได้ เช่น ใช้ใน <tr> และ <td> สำหรับการวนลูปข้อมูล 2 มิติ

6. การใช้ Key กับ v-for

ทำไมต้องใช้ key?

  • เพื่อเพิ่มประสิทธิภาพในการอัปเดต DOM
  • ใช้ระบุแต่ละรายการในลูปอย่างชัดเจน

ตัวอย่างที่ดี:

<li v-for="item in items" :key="item.id">{{ item.name }}</li>

ตัวอย่างที่ไม่ควรทำ:

<li v-for="item in items">{{ item.name }}</li>

7. การกรองข้อมูลก่อนการวนลูป

คุณสามารถกรองข้อมูลก่อนการแสดงผลด้วย Computed Property

ตัวอย่าง:

<template>
  <div>
    <h1>Filtered List</h1>
    <ul>
      <li v-for="item in filteredItems" :key="item.id">
        {{ item.name }}
      </li>
    </ul>
  </div>
</template>

<script>
export default {
  data() {
    return {
      items: [
        { id: 1, name: 'Apple', type: 'fruit' },
        { id: 2, name: 'Carrot', type: 'vegetable' },
        { id: 3, name: 'Banana', type: 'fruit' }
      ],
      filter: 'fruit'
    };
  },
  computed: {
    filteredItems() {
      return this.items.filter(item => item.type === this.filter);
    }
  }
};
</script>

ผลลัพธ์:
จะแสดงเฉพาะรายการที่มี type เป็น fruit


8. สรุป

ในบทนี้ คุณได้เรียนรู้เกี่ยวกับ:

  • การใช้ v-for กับ Array, Object, และช่วงตัวเลข
  • การใช้งาน v-for ซ้อนกัน
  • การใช้ Key เพื่อเพิ่มประสิทธิภาพ DOM
  • การกรองข้อมูลก่อนการวนลูป

ในบทถัดไป เราจะศึกษาวิธีจัดการ Event ใน Vue.js!