今天要說說的是 Composition API 中 新增加的 WatchEffect
,我們可以姑且把它看作是 watch 和 computed 的結合體。
watchEffect 特別的地方在於 : 我們不必指定要監聽的變數,只要對應的雙向綁定資料有所變動,就會執行了。
<div id="app"> {{ watchText }} // 去買蛋餅
<input type="text" v-model="productName">
<br>
<input type="text" v-model="product.name">
</div>
const { createApp,ref,watchEffect } = Vue
const app = createApp({
setup(){
// 純值
const productName = ref("蛋餅")
// 物件
const product = ref({
name:"蛋餅",
price:"30"
})
const watchText = ref("")
watchEffect(()=>{
// console.log('1.純值監聽 :', productName.value)
// console.log('2.物件監聽:', product.value.name)
watchText.value = `去買 ${product.value.name}`
})
return{
productName,
product,
watchText
}
}
})
app.mount(#app)
當我們使用 watch 監聽變數時,watch 是不能被停止的。但 watch Effect 可以。
若想要解除監聽,我們需要將 watchEffect 賦值給一個變數,然後再呼叫一次就可以了。
let num = 0
const stopWatchEffect = watchEffect(()=>{
watchText.value = `去買 ${product.value.name}` ;
num++; // 計算觸發次數
})
// 假如觸發時次就停止監聽
if(num === 10){
stopWatchEffect() // 呼叫停止監聽
}
關於 watch
關於 watchEffect
參考資料:
Vue3 - 每天來一點雷 Part 2
Day_20 : 讓 Vite 來開啟你的Vue 之 watch & watchEffect