30
Vue 3 學習之旅
進階應用

偵聽副作用:watchEffect()

·6 分鐘閱讀·進階應用

摘要

watchEffect() 是一個簡化的偵聽器,它會立即執行一個副作用函式,同時自動追蹤該函式執行期間所用到的所有響應式依賴。當任何依賴變化時,該函式會被重新執行。

定義與說明

watchEffect 與 watch 的主要區別:

依賴追蹤:

watch 需要你明確指定要偵聽的來源;watchEffect 則是隱式地、自動地收集依賴。

執行時機:

watch 預設在資料變化後才執行;watchEffect 總是在建立時就立即執行一次,以便收集初始依賴。

它更關心「副作用函式本身」,只要函式內部用到的任何東西變了,就重新執行。

實作範例

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

const userId = ref(1);

// watchEffect 會立即執行,並自動追蹤 userId 的變化
watchEffect(async () => {
  // 在這個函式中,我們用到了 userId.value
  // 所以當 userId.value 改變時,這個函式會自動重新執行
  console.log(`正在為使用者 ${leftBrace}userId.value${rightBrace} 獲取資料...`);
  // const response = await fetch(`api/users/${leftBrace}userId.value${rightBrace}`);
  // ...
});
</script>

<template>
  <p>目前使用者 ID: {{ userId }}</p>
  <button @click="userId++">獲取下一個使用者</button>
</template>

結論

當你的副作用邏輯與其依賴的資料來源高度耦合時,watchEffect() 提供了一種更簡潔、更直接的寫法。它免去了手動聲明依賴的步驟,讓程式碼更加精簡,尤其適用於那些「只要用到的東西變了,就重新執行」的場景。

watchEffect 副作用 自動追蹤