Contents

เรียนรู้เกี่ยวกับ Vue.js Watchers เพื่อปรับปรุงการพัฒนาเว็บแอปของคุณ

ประเด็นที่สำคัญ

Vue เป็นเฟรมเวิร์ก JavaScript ยอดนิยมที่ให้ประโยชน์หลักหลายประการแก่นักพัฒนาในการสร้างเว็บแอปพลิเคชัน ซึ่งรวมถึงการสนับสนุนสถาปัตยกรรมแบบคอมโพเนนต์ ซึ่งช่วยให้โค้ดแบบโมดูลาร์และนำมาใช้ซ้ำได้ ระบบการจัดการสถานะที่แข็งแกร่ง ซึ่งช่วยรักษาความสอดคล้องในส่วนต่างๆ ของแอปพลิเคชัน และความสามารถในการกำหนดเส้นทางในตัว ช่วยให้สามารถนำทางระหว่างหน้าหรือมุมมองต่างๆ ภายในเว็บไซต์เดียวกันได้อย่างราบรื่น ด้วยการใช้ประโยชน์จากคุณสมบัติเหล่านี้ นักพัฒนาสามารถปรับปรุงเวิร์กโฟลว์ของตนและสร้างเว็บแอปที่มีประสิทธิภาพและปรับขนาดได้มากขึ้นโดยใช้ Vue

ผู้เฝ้าดู Vue ทำหน้าที่เป็นผู้สังเกตการณ์คุณสมบัติเชิงโต้ตอบ ช่วยให้สามารถตรวจจับการเปลี่ยนแปลง และอำนวยความสะดวกในการตอบสนองต่อเหตุการณ์ที่เกิดขึ้นหรือการแก้ไขข้อมูล

การใช้คุณสมบัติที่คำนวณนั้นเป็นทางเลือกที่กระชับและชัดเจนกว่าเมื่อเปรียบเทียบกับการใช้ตัวเฝ้าดูเพื่อให้ได้ฟังก์ชันที่คล้ายคลึงกัน ซึ่งท้ายที่สุดจะนำไปสู่ความเร็วในการดำเนินการที่ดีขึ้นและกระบวนการดีบักที่คล่องตัวยิ่งขึ้น

กรอบงาน JavaScript ได้พัฒนาเป็นองค์ประกอบที่ขาดไม่ได้ในขอบเขตของการพัฒนาเว็บ เนื่องมาจากคุณลักษณะที่ใช้งานง่าย เช่น การออกแบบโมดูลาร์ การอนุรักษ์สถานะ และการจัดการการนำทาง ด้วยเหตุนี้ ส่วนประกอบที่สำคัญเหล่านี้จึงมีส่วนช่วยอย่างมากในการบรรเทาภาระ ค่าใช้จ่าย และระยะเวลาที่จำเป็นสำหรับการสร้างเว็บแอปพลิเคชันใหม่

Vue มีคุณสมบัติมากมายที่เอื้อต่อการพัฒนาแอปพลิเคชันอย่างรวดเร็ว ฟังก์ชันหนึ่งดังกล่าวคือคุณลักษณะ Watch ซึ่งช่วยให้นักพัฒนาสามารถติดตามการเปลี่ยนแปลงในค่าตัวแปรและนิพจน์ระหว่างการดำเนินการรันไทม์

Watchers ใน Vue คืออะไร?

ผู้เฝ้าดู Vue ประกอบขึ้นเป็นฟังก์ชันที่สังเกตการเปลี่ยนแปลงในคุณสมบัติที่เกิดปฏิกิริยา และต่อมาให้การตอบสนองที่เหมาะสมตามการแก้ไขดังกล่าว เครื่องมือเฝ้าดูเหล่านี้ช่วยให้ผู้ใช้ตอบสนองต่อเหตุการณ์ที่เกิดขึ้นและการปรับเปลี่ยนข้อมูล ซึ่งเป็นช่องทางสำหรับการตรวจสอบอย่างเอาใจใส่ภายในแอปพลิเคชัน

ในการใช้ Watcher ภายในโปรเจ็กต์ Vue ของคุณ คุณต้องนำเข้าฟังก์ชัน “watch” จากแพ็คเกจ Vue ก่อนและรวมเข้ากับสคริปต์ของคุณ

 <script setup>
import { watch } from 'vue';
</script>

การใช้ฟังก์ชัน watch ที่ให้มา เราอาจรวม"watcher"ไว้ภายในองค์ประกอบ Vue ของตนได้อย่างมีประสิทธิภาพ ภาพประกอบเบื้องต้นมีดังนี้:

 <template>
  <div>
    <p>{{ user }}</p>
    <button @click="changeName">Change Name</button>
  </div>
</template>

<script setup>
import { ref, watch } from 'vue';

const user = ref('Chinedu');

const changeName = () => {
  user.value = 'Victor'; // Change the user's name
};

watch(user, (newUser, oldUser) => {
  alert(`User name changed from "${oldUser}" to "${newUser}"`);
});
</script>

องค์ประกอบเฉพาะนี้ใช้ฟังก์ชัน Watcher เพื่อติดตามการเปลี่ยนแปลงตัวตนของผู้ใช้ พื้นที่มาร์กอัปของบล็อกโค้ดจะสร้างเฟรมเวิร์ก HTML ของส่วนประกอบ ซึ่งประกอบด้วยองค์ประกอบย่อหน้าที่แสดงมูลค่าของสารตั้งต้นชื่อ “ผู้ใช้

เทมเพลตประกอบด้วยส่วนประกอบของปุ่มที่เชื่อมโยงกับตัวฟังเหตุการณ์การคลิกและฟังก์ชัน changeName เมื่อแก้ไขอินพุตของผู้ใช้ Vue จะเรียกใช้ฟังก์ชันการโทรกลับที่กำหนดซึ่งต่อมาจะแสดงข้อความป๊อปอัปที่ระบุว่า"ชื่อผู้ใช้ได้รับการอัปเดตจาก’Chinedu’เป็น’Victor'

การเปรียบเทียบผู้ดูด้วยคุณสมบัติที่คำนวณ

จำเป็นอย่างยิ่งที่จะต้องเข้าใจความแตกต่างระหว่างผู้เฝ้าดูและคุณสมบัติที่คำนวณ เมื่อใช้เป็นกลไกเชิงโต้ตอบภายในกรอบงาน Vue แม้ว่าทั้งสองฟังก์ชันจะทำหน้าที่คล้ายกันในแง่ของการอัปเดตการผูกข้อมูลตามการเปลี่ยนแปลง แต่ก็จำเป็นอย่างยิ่งที่จะต้องใช้ฟังก์ชันแต่ละอย่างเพื่อวัตถุประสงค์เฉพาะของตน

ภาพประกอบของแนวคิดนี้สามารถพบได้ในการคำนวณอายุรวมของพ่อและลูกชายโดยใช้นาฬิกาแดด ดังนี้

 <template>
  <input type="text" placeholder="Father's Age" v-model="father">
  <input type="text" placeholder="Son's Age" v-model="son">
  <p>Total Age: {{ total }}</p>
</template>

<script setup>
import { ref, watch } from 'vue';

const father = ref();
const son = ref();
const total = ref();

watch(son, (newAge, oldAge) => {
  total.value = Number(father.value) \+ Number(newAge)
})

watch(father, (newAge, oldAge) => {
  total.value = Number(newAge) \+ Number(son.value)
})

</script>

ส่วนประกอบ Vue ที่กำหนดใช้ผู้เฝ้าดูเพื่อรับผลรวมอายุของพ่อและลูกชายโดยการสร้างตัวแปรปฏิกิริยาใหม่ที่เรียกว่า"ผลรวม"กระบวนการนี้ดำเนินการโดยใช้ Composition API ที่ได้รับจาก Vue

รหัสใช้ฟังก์ชันนาฬิกาสองฟังก์ชันเพื่อติดตามอายุของทั้งพ่อและลูก ด้วยการคำนวณผลรวมของอายุเหล่านี้และอัปเดตมูลค่าของอายุของบุคคลหนึ่งด้วยอายุของอีกคนหนึ่ง จะได้ผลรวมสุดท้ายสำหรับอายุรวม ผลลัพธ์นี้จะถูกเก็บไว้ใน

ในทำนองเดียวกัน ลองตรวจสอบตัวอย่างที่เกี่ยวข้องกับคุณสมบัติที่คำนวณ:javascriptconst person={firstName:‘John’,lastName:‘Doe’,fullName() {return this.firstName +’’+ this.lastName;}};console เข้าสู่ระบบ(person.fullName);//เอาท์พุต: จอห์น โด

 <template>
  <input type="text" placeholder="Father's Age" v-model="father">
  <input type="text" placeholder="Son's Age" v-model="son">
  <p>Total Age: {{ total }}</p>
</template>

<script setup>
import { ref , computed } from 'vue';

const father = ref();
const son = ref();

const total = computed(() => {
  return Number(father.value) \+ Number(son.value);
});

</script>

โค้ดที่ได้รับการแก้ไขนำเสนอแนวทางที่กระชับและคล่องตัวมากขึ้นในการอ่านอายุของทั้งพ่อและลูกชาย ขณะเดียวกันก็ใช้ประโยชน์จากคุณสมบัติที่คำนวณเพื่อจัดเก็บจำนวนรวมของพวกเขา ด้วยการใช้ความสามารถในการผูกข้อมูลอันทรงพลังของ Vue ผ่านการประมาณค่าภายในส่วนเทมเพลต ทำให้ข้อมูลสามารถแสดงต่อผู้ใช้ได้อย่างราบรื่น

การใช้คุณสมบัติที่คำนวณได้ทำให้มีวิธีที่มีประสิทธิภาพมากขึ้นในการกำหนดค่าผลรวมของค่าอายุสองค่า เมื่อเทียบกับการพึ่งพาผู้เฝ้าดู การใช้งานตัวเฝ้าดูในบริบทนี้อาจส่งผลให้เวลาในการโหลดเพิ่มขึ้นและทำให้กระบวนการแก้ไขจุดบกพร่องซับซ้อนขึ้นเนื่องจากโค้ดเบสที่ซับซ้อนมากขึ้นโดยเนื้อแท้

ขอแนะนำให้ใช้ผู้เฝ้าดูเพื่อการสังเกตและตอบสนองต่อการแก้ไขข้อมูลโดยเฉพาะ แทนที่จะใช้มันเป็นทางเลือกแทนคุณสมบัติการคำนวณ ซึ่งได้รับการออกแบบมาโดยเฉพาะเพื่อรับข้อมูลเพิ่มเติมจากข้อมูลเชิงโต้ตอบในปัจจุบัน

ตัวเลือกทันทีที่มีให้สำหรับผู้ดูใน Vue

ตัวเลือก “ทันที” ซึ่งทำหน้าที่เป็นทางเลือกอื่นในระหว่างกระบวนการสร้างตัวเฝ้าดู จะกำหนดว่าฟังก์ชันการโทรกลับของผู้เฝ้าดูจะถูกดำเนินการทันทีเมื่อติดตั้งส่วนประกอบ Vue ที่เกี่ยวข้องสำเร็จหรือไม่

แน่นอนว่า นี่คือภาพประกอบของส่วนประกอบที่ใช้ฟังก์ชันเฝ้าดูพร้อมกับแอตทริบิวต์"ทันที":

 <script setup>
import { ref, watch } from 'vue';

const count = ref(10);

watch(
  count,
  (newCount, oldCount) => {
    console.log(`Count changed from ${oldCount} to ${newCount}`);
  },
  { immediate: true }
);
</script>

เมื่อเริ่มต้นวงจรชีวิตของส่วนประกอบดังกล่าว ผู้สังเกตการณ์จะต้องดำเนินการฟังก์ชันเสริมทันทีและลงทะเบียน"การนับเปลี่ยนจากสถานะไม่แน่นอนเป็นสิบ"ในบันทึกของระบบ การกระทำดังกล่าวบ่งชี้ว่าเอนทิตีเบื้องต้นไม่ได้รับการกำหนดค่าใด ๆ ก่อนที่ Vue จะระบุค่าสิบให้กับการอ้างอิงตัวนับ

ในบางสถานการณ์ การใช้ตัวเลือก"ทันที"อาจพิสูจน์ได้ว่าเป็นประโยชน์สำหรับการดำเนินการเริ่มต้นหรือการเริ่มต้น ขึ้นอยู่กับสถานะปัจจุบันของคุณลักษณะที่ได้รับการตรวจสอบ ตามภาพประกอบ หากแอปพลิเคชันของคุณจำเป็นต้องดึงข้อมูลจาก API ทันทีที่เมาท์ส่วนประกอบเฉพาะ

ตัวเลือก Deep มีอยู่ใน Vue Watchers

คุณลักษณะการเฝ้าดูของ Vue นำเสนอการสังเกตในระดับที่ลึกซึ้งสำหรับการแก้ไขภายในวัตถุหรืออาร์เรย์ที่ปิดล้อม ช่วยให้สามารถตรวจจับการเปลี่ยนแปลงที่เกิดขึ้นภายในคุณสมบัติที่ฝังลึกได้ ความสามารถนี้เปิดใช้งานได้โดยการตั้งค่าพารามิเตอร์ที่เกี่ยวข้องให้เทียบเท่ากับการยืนยัน

นี่คือภาพประกอบของส่วนประกอบ Vue.js ที่ใช้ตัวเลือก"ลึก"ซึ่งช่วยให้สามารถแสดงและแก้ไขออบเจ็กต์ที่ซ้อนกันในโครงสร้างคล้ายต้นไม้ภายในช่องอินพุต:

 <script setup>
import { ref, watch } from 'vue';

const data = ref({ length: 42 });

watch(
  data,
  (newData, oldData) => {
    console.log(`Data changed"`);
  },
  { deep: true }
);

// This will trigger the watcher because it's a deep change
data.value.length = 43;
</script>

ส่วนโค้ดที่ให้มาจะเริ่มต้นการอ้างอิง data ด้วยออบเจ็กต์ที่มีแอตทริบิวต์"length"ต่อจากนั้น จะเปิดใช้งานตัวเลือก"ลึก"และตรวจสอบในคอนโซลว่าข้อมูลได้รับการอัปเดตเนื่องจากค่าของคุณสมบัติ"ความยาว"ได้เปลี่ยนจากสถานะดั้งเดิมเป็นสามสิบสาม (33)

เมื่อเริ่มต้นตัวแปรข้อมูลใน Vue เป็นออบเจ็กต์ที่มีปฏิกิริยา ตัวแปรจะสามารถติดตามการเปลี่ยนแปลงของออบเจ็กต์ที่ซ้อนกันแบบลึกโดยไม่ต้องใช้ตัวเลือก"ลึก"ในทางกลับกัน หากไม่ได้เปิดใช้งานตัวเลือก"ลึก"ฟังก์ชันนาฬิกาจะไม่สามารถตรวจจับการแก้ไขที่ทำกับวัตถุดังกล่าวได้

 <script setup>
import { ref, watch } from 'vue';

const data = reactive({ length: 42 });

watch(
  data,
  (newData, oldData) => {
    console.log(`Data changed"`);
  }
);

// This will trigger the watcher because it changes a reactive object
data.length = 43;
</script>

รหัสที่ให้มาประกอบด้วยฟังก์ชันนาฬิกา ซึ่งเมื่อตรวจพบการเปลี่ยนแปลงต่อวัตถุปฏิกิริยาที่เรียกว่า"ข้อมูล"จะบันทึกข้อความไปยังคอนโซลเพื่อระบุว่ามีการแก้ไขดังกล่าวเกิดขึ้น

สร้างแอปที่ดีขึ้นด้วย Vue Watchers

ผู้เฝ้าดูของ Vue เปิดใช้งานพฤติกรรมเชิงโต้ตอบในระดับสูงภายในแอปพลิเคชัน โดยอนุญาตให้สังเกตการแก้ไขคุณลักษณะข้อมูลเฉพาะ ทริกเกอร์การดำเนินการที่กำหนดไว้ล่วงหน้าร่วมกับการเปลี่ยนแปลงดังกล่าว

การทำความเข้าใจสถานการณ์ที่เหมาะสมสำหรับการจ้างผู้เฝ้าดูอย่างเชี่ยวชาญ การแยกแยะความแตกต่างกับคุณสมบัติที่คำนวณได้ และการทำความคุ้นเคยกับตัวเลือกต่างๆ เช่น ทันทีและเชิงลึกจะช่วยเพิ่มขีดความสามารถอย่างมากในการสร้างแอปพลิเคชัน Vue ที่มีปฏิกิริยาสูง