1.数据源
javascript
const x = ref(0)
const y = ref(0)
(1)ref(包括计算属性)
javascript
// 单个 ref
watch(x, (newX) => {
console.log(`x is ${newX}`)
})
(2)响应式对象
不能直接监听响应式函数对象的属性值
错误
javascript
const obj = reactive({ count: 0 })
// 错误,因为 watch() 得到的参数是一个 number
watch(obj.count, (count) => {
console.log(`Count is: ${count}`)
})
需要用返回盖属性的getter函数
javascript
// 提供一个 getter 函数
watch(
() => obj.count,
(count) => {
console.log(`Count is: ${count}`)
}
)
对象本身就是深层监听
javascript
const obj = reactive({ count: 0 })
watch(obj, (newValue, oldValue) => {
// 在嵌套的属性变更时触发
// 注意:`newValue` 此处和 `oldValue` 是相等的
// 因为它们是同一个对象!
})
相比之下,一个返回响应式对象的 getter 函数,只有在返回不同的对象时,才会触发回调:
javascript
watch(
() => state.someObject,
() => {
// 仅当 state.someObject 被替换时触发
}
)
deep
javascript
watch(
() => state.someObject,
(newValue, oldValue) => {
// 注意:`newValue` 此处和 `oldValue` 是相等的
// *除非* state.someObject 被整个替换了
},
{ deep: true }
)
(3)getter函数
javascript
// getter 函数
watch(
() => x.value + y.value,
(sum) => {
console.log(`sum of x + y is: ${sum}`)
}
)
(4)多个数据源组成的数组
javascript
// 多个来源组成的数组
watch([x, () => y.value], ([newX, newY]) => {
console.log(`x is ${newX} and y is ${newY}`)
})
2.即时回调 immediate
3.一次性 once
4.watchEffect

5.区别
