不能直接监听响应式对象的属性值
// 错误用法
const obj = reactive({ count: 0 })
// 错误,因为 watch() 得到的参数是一个 number
watch(obj.count, (count) => {
console.log(`count is: ${count}`)
})
// 正确用法
// 提供一个 getter 函数
watch(
() => obj.count,
(count) => {
console.log(`count is: ${count}`)
}
)
深层次监听
const obj = reactive({ count: 0 })
watch(obj, (newValue, oldValue) => {
// 在嵌套的属性变更时触发
// 注意:`newValue` 此处和 `oldValue` 是相等的
// 因为它们是同一个对象!
})
obj.count++
监听props也要使用getter函数
`watchEffect` 仅会在其**同步**执行期间,才追踪依赖。在使用异步回调时,只有在第一个 `await` 正常工作前访问到的属性才会被追踪。
// 错误代码
// 正确代码