关键词:侦听器 watch
Vue 3 提供了一个灵活的响应式系统,其中 watch 函数是实现细粒度数据观察和响应的重要工具。watch 能够侦听 Vue 应用中的响应式数据的变化,并在数据变化时执行相应的回调函数。这个功能在 Vue 2 中以 watch 选项的形式存在,而在 Vue 3 的组合式 API 中,则是作为 watch 函数来使用。
使用 watch 侦听 Refs
watch函数可以用来侦听一个引用类型(ref)的变化:
import { ref, watch } from "vue";
const count = ref(0);
watch(count, (newValue, oldValue) => {
console.log(`新值:${newValue},旧值:${oldValue}`);
});在上面的例子中,当 count 的值变化时,回调函数就会被调用,并打印新旧值。
使用 watch 侦听响应式对象
除了侦听引用类型,watch 还可以侦听响应式对象的属性变化:
import { reactive, watch } from "vue";
const state = reactive({ count: 0 });
watch(
() => state.count,
(newValue, oldValue) => {
console.log(`新值:${newValue},旧值:${oldValue}`);
}
);记住,当侦听响应式对象的某个属性时,你需要使用一个函数来返回这个属性的当前值。
侦听多个源
watch 还可以同时侦听多个数据源:
watch([ref1, ref2], ([newVal1, newVal2], [oldVal1, oldVal2]) => {
// 处理逻辑
});深度侦听
通过设置 watch 的选项 { deep: true },可以进行深度侦听,即侦听对象内嵌属性的变化:
watch(obj, callback, { deep: true });清理和停止监听
watch 函数返回一个停止监听的函数,可以用来在合适的时机停止侦听:
const stopWatching = watch(dataSource, callback);
// 停止侦听
stopWatching();watchEffect
除了 watch,Vue 3 也引入了 watchEffect 函数。watchEffect 自动跟踪其回调函数中使用的响应式引用和响应式对象的属性,并在它们变化时运行回调函数。它不需要显式声明侦听的数据源,这让它更简单易用,但在某些情况下,它可能不如 watch 那么精确控制。