28
Vue 3 學習之旅
進階應用
深度偵聽與立即執行
·6 分鐘閱讀·進階應用
摘要
watch() 可透過 deep: true
選項來偵聽物件內部的深層變化,並透過 immediate: true
選項讓偵聽器在建立時就立即以初始值執行一次回呼函式。
定義與說明
這兩個選項作為第三個參數傳入 watch:
deep: true:
預設情況下,watch 一個物件時,只有在物件參考本身被替換時才會觸發。設定 deep: true 後,watch 會遞迴地遍歷該物件,任何巢狀屬性的變化都會觸發偵聽器。(注意:直接偵聽 reactive 物件時,此選項預設為 true)。
immediate: true:
預設情況下,watch 的回呼函式只在資料第一次變化後才執行。設定 immediate: true 後,回呼函式會在偵聽器被建立時,立即以資料的初始狀態執行一次。
實作範例
Vue SFC
<script setup>
import { ref, watch } from 'vue';
const settings = ref({ nested: { volume: 50 } });
// 使用 deep 和 immediate 選項
watch(settings, (newSettings) => {
console.log('設定已更新:', newSettings);
}, {
deep: true, // 偵聽 settings.nested.volume 的變化
immediate: true // 立即以初始值執行一次
});
</script>
<template>
<p>音量: {{ settings.nested.volume }}</p>
<button @click="settings.nested.volume++">增加音量</button>
</template>
結論
deep 和 immediate 選項為 watch 提供了更強大的控制能力。deep 用於處理複雜巢狀資料的偵聽,而 immediate 則常用於需要在元件初始化時就根據初始資料執行一次邏輯的場景(如獲取初始資料)。
deep immediate 深度偵聽