29
Vue 3 學習之旅
進階應用

偵聽多個來源

·6 分鐘閱讀·進階應用

摘要

watch() 的第一個參數可以是一個由多個響應式來源組成的陣列,當陣列中任何一個來源發生變化時,都會觸發同一個回呼函式。

定義與說明

當你需要根據多個不同資料的變化,來執行同一個副作用時,可以將這些資料來源放入一個陣列中,作為 watch 的第一個參數。這樣,回呼函式接收到的 newValue 和 oldValue 也會是陣列,其順序與來源陣列一一對應。

實作範例

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

const name = ref('Jake');
const age = ref(30);

// 同時偵聽 name 和 age
watch([name, age], ([newName, newAge], [oldName, oldAge]) => {
  console.log(`資料已改變:`);
  console.log(`姓名從 ${leftBrace}oldName${rightBrace} 變為 ${leftBrace}newName${rightBrace}`);
  console.log(`年齡從 ${leftBrace}oldAge${rightBrace} 變為 ${leftBrace}newAge${rightBrace}`);
});
</script>

<template>
  <p>姓名: <input v-model="name"></p>
  <p>年齡: <input v-model.number="age"></p>
</template>

結論

偵聽多個來源是組織程式碼的有效方式。它避免了為多個相關資料來源編寫重複的 watch 邏輯,讓程式碼更簡潔、意圖更清晰。

watch 多個來源 陣列