Skip to content

List Rendering ใน Vue 3

List Rendering คือการวนลูปแสดงผลรายการ (array, object) ใน template ด้วย directive v-for

v-for คืออะไร?

  • ใช้สำหรับวนลูป array หรือ object เพื่อสร้าง element/component หลายตัวตามข้อมูล
  • สามารถใช้กับ array, object, หรือช่วงตัวเลข (range)

ตัวอย่าง: วนลูป array

vue
<template>
  <ul>
    <li v-for="user in users" :key="user.id">
      {{ user.name }}
    </li>
  </ul>
</template>

<script setup lang="ts">
import { ref } from "vue";
const users = ref([
  { id: 1, name: "Alice" },
  { id: 2, name: "Bob" },
]);
</script>

ตัวอย่าง: วนลูป object

vue
<template>
  <div v-for="(value, key) in info" :key="key">
    {{ key }}: {{ value }}
  </div>
</template>

<script setup lang="ts">
const info = {
  age: 25,
  country: "Thailand",
};
</script>

ตัวอย่าง: วนลูปช่วงตัวเลข (range)

vue
<template>
  <span v-for="n in 5" :key="n">{{ n }}</span>
</template>

การใช้ key ที่ถูกต้อง

  • ควรใส่ :key ที่ unique ในแต่ละรอบของ v-for เพื่อให้ Vue จัดการ DOM ได้มีประสิทธิภาพ
  • ถ้าใช้ array ของ object ให้ใช้ id ที่ไม่ซ้ำกัน

v-for ซ้อน v-if (ข้อควรระวัง)

  • ถ้าใช้ v-if กับ v-for ใน element เดียวกัน จะ evaluate v-if ในทุก loop (อาจทำงานไม่ตรงที่คาด)
  • ควรแยก v-if ออกมาครอบ v-for หรือใช้ computed filter data ก่อน

ข้อควรระวังและแนวทางเลือกใช้

  • ใส่ key ที่ unique เสมอใน v-for
  • หลีกเลี่ยงการใช้ index เป็น key ถ้าข้อมูลมีการเปลี่ยนแปลงบ่อย
  • ถ้าต้อง filter หรือซ่อนบางรายการ ให้ filter ข้อมูลก่อน แล้วค่อย v-for
  • ใช้ v-for ได้ทั้งกับ element และ component