在Vue 3中,watch
和watchEffect
是用于响应式监听数据变化的两个函数。它们的主要区别在于:
-
watch
需要明确指定要监视的数据源,而watchEffect
则可以自动收集其使用的响应式数据,因此代码会更简洁,但是,它的回调函数无法获得旧值和新值的参数。 -
watch
在监听对象或数组时,需要开启deep
选项才能深度监听其属性或元素的变化。而watchEffect
会自动追踪响应式数据的依赖,并在赋值、方法调用等操作后重新执行回调函数。
举个例子,假设我们有一个count
变量和一个list
数组。我们想在它们的值发生变化时执行某些操作。使用watch
的代码如下:
watch(
[() => count, () => list],
([newCount, newList], [oldCount, oldList]) => {
// 执行某些操作
},
{deep: true}
);
watch
需要明确指定要监测的数据源,并且需要开启deep
选项以监测对象或数组的深层属性/元素。它的回调函数接受新旧值的参数。
使用watchEffect
的代码如下:
watchEffect(() => {
// 执行某些操作,这里可以直接访问到count和list
});
watchEffect
会自动追踪回调函数中使用到的响应式数据的依赖,并在其发生变化时重新执行回调函数。因此,我们可以将操作直接放在回调函数中,而不需要指定要监测的数据源。但是,它的回调函数无法获得旧值和新值的参数。
总之,watch
和watchEffect
都是用于监听数据变化的重要函数。你可以根据具体情况选择使用哪个函数。如果需要明确指定要监测的数据源,或需要访问新旧值的参数,则应该使用watch
;如果希望代码更简洁,并且不需要获得新旧值的参数,则应该使用watchEffect
。