Dev to webs {Coding…}

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

บทที่ 11: การใช้ Watchers ใน Vue.js

1. Watchers คืออะไร?

Watchers ใน Vue.js คือฟังก์ชันที่ช่วยเฝ้าดูการเปลี่ยนแปลงของค่าต่าง ๆ ใน data หรือ computed properties และทำการเรียกใช้งานฟังก์ชันเมื่อค่าดังกล่าวเปลี่ยนแปลง

Watchers เหมาะสำหรับสถานการณ์ที่คุณต้องการทำงานบางอย่างเมื่อข้อมูลเปลี่ยนแปลง เช่น การเรียก API, การปรับค่าคำนวณ หรือการอัปเดตข้อมูลอื่น ๆ


2. การใช้งาน Watchers เบื้องต้น

ตัวอย่าง:

<template>
  <div>
    <h1>Search Example</h1>
    <input v-model="searchQuery" placeholder="Type something..." />
    <p>Searching for: {{ searchQuery }}</p>
  </div>
</template>

<script>
export default {
  data() {
    return {
      searchQuery: ''
    };
  },
  watch: {
    searchQuery(newQuery, oldQuery) {
      console.log(`Search changed from "${oldQuery}" to "${newQuery}"`);
    }
  }
};
</script>

ผลลัพธ์:

  • เมื่อ searchQuery เปลี่ยนแปลง จะมีข้อความใน Console เช่น
  Search changed from "" to "Vue.js"

3. การใช้ Watchers สำหรับการคำนวณ

ตัวอย่าง:

<template>
  <div>
    <h1>Price Calculator</h1>
    <input type="number" v-model="price" placeholder="Enter price" />
    <input type="number" v-model="quantity" placeholder="Enter quantity" />
    <p>Total: {{ total }}</p>
  </div>
</template>

<script>
export default {
  data() {
    return {
      price: 0,
      quantity: 0,
      total: 0
    };
  },
  watch: {
    price() {
      this.calculateTotal();
    },
    quantity() {
      this.calculateTotal();
    }
  },
  methods: {
    calculateTotal() {
      this.total = this.price * this.quantity;
    }
  }
};
</script>

คำอธิบาย:

  • เมื่อ price หรือ quantity เปลี่ยนแปลง ฟังก์ชัน calculateTotal จะถูกเรียกใช้งานเพื่ออัปเดต total

4. การใช้งาน Immediate และ Deep Watch

Immediate Watch

  • ใช้ immediate: true เพื่อเรียก Watcher ทันทีที่ Component ถูกโหลด
<script>
export default {
  data() {
    return {
      name: ''
    };
  },
  watch: {
    name: {
      handler(newName) {
        console.log(`Name updated to: ${newName}`);
      },
      immediate: true
    }
  }
};
</script>

Deep Watch

  • ใช้สำหรับเฝ้าดู Object ที่มีโครงสร้างซับซ้อน
<script>
export default {
  data() {
    return {
      user: {
        name: '',
        age: 0
      }
    };
  },
  watch: {
    user: {
      handler(newUser) {
        console.log('User data updated:', newUser);
      },
      deep: true
    }
  }
};
</script>

คำอธิบาย:

  • deep: true ใช้สำหรับตรวจสอบการเปลี่ยนแปลงในทุก Property ของ Object user

5. การใช้งาน Watchers ร่วมกับ API

ตัวอย่าง:

<template>
  <div>
    <h1>Search API</h1>
    <input v-model="query" placeholder="Search..." />
    <p>{{ result }}</p>
  </div>
</template>

<script>
export default {
  data() {
    return {
      query: '',
      result: ''
    };
  },
  watch: {
    query: {
      handler(newQuery) {
        this.fetchData(newQuery);
      },
      immediate: true
    }
  },
  methods: {
    fetchData(query) {
      if (query) {
        // จำลองการเรียก API
        this.result = `Results for "${query}"`;
      } else {
        this.result = '';
      }
    }
  }
};
</script>

คำอธิบาย:

  • เมื่อ query เปลี่ยนแปลง ฟังก์ชัน fetchData จะถูกเรียกใช้งานเพื่ออัปเดตผลลัพธ์การค้นหา

6. สรุป

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

  • การใช้งาน Watchers เพื่อเฝ้าดูการเปลี่ยนแปลงของข้อมูล
  • การใช้งาน Immediate และ Deep Watch
  • การใช้ Watchers เพื่อจัดการการคำนวณและการเรียก API

ในบทถัดไป เราจะศึกษาการใช้ Directive ใน Vue.js อย่างละเอียด!