27
Vue 3 學習之旅
進階應用
偵聽器:watch()
·6 分鐘閱讀·進階應用
摘要
watch() 用於「偵聽」一個特定響應式資料來源的變化,並在資料變化時,執行一個指定的副作用 (Side Effect) 函式,例如發起網路請求。
定義與說明
watch() 函數接收至少兩個參數:
來源 (Source):
你想要偵聽的響應式資料,可以是一個 ref、reactive 物件、一個 getter 函數,或由它們組成的陣列。
回呼函式 (Callback):
當來源變化時要執行的函式。這個函式會接收到新值 (newValue) 和舊值 (oldValue) 作為參數。
watch 關心的是變化的「過程」,並在過程中觸發一個「動作」;而 computed 關心的是變化的「結果」,並產出一個「新值」。
實作範例
Vue SFC
<script setup>
import { ref, watch } from 'vue';
const question = ref('');
const answer = ref('請輸入問題...');
// 偵聽 question ref 的變化
watch(question, async (newQuestion, oldQuestion) => {
if (newQuestion.includes('?')) {
answer.value = '思考中...';
// 模擬 API 請求
setTimeout(() => {
answer.value = '我想 Vue 是一個很棒的框架!';
}, 1500);
}
});
</script>
<template>
<p>
<input v-model="question" placeholder="輸入一個包含 '?' 的問題" />
</p>
<p>{{ answer }}</p>
</template>
結論
watch() 是執行響應式副作用的標準工具。當你需要在某個資料變化時,執行非同步操作或觸發一個與產生新值無關的動作時,就應該使用 watch。
watch 偵聽器 副作用