watch

139 阅读1分钟

不能直接监听响应式对象的属性值

// 错误用法
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` 正常工作前访问到的属性才会被追踪。

// 错误代码 c8e293cddda1f6a14ae8446872e8d67.jpg // 正确代码 7cceab55dba0434455261a4d1dc924f.jpg