watch
用于监视一个或多个特定的响应式数据源,并在数据变化时执行回调。它类似于 Vue 2 中的 watch
选项,但在 Vue 3 中可以直接在组合式 API 中使用。
import { ref, watch } from 'vue';
const count = ref(0);
watch(count, (newVal, oldVal) => {
console.log(`Count changed from ${oldVal} to ${newVal}`);
});
count.value++; // 输出: Count changed from 0 to 1
watchEffect
用于立即运行一个函数并在其依赖的响应式数据发生变化时重新运行。它更类似于计算属性,但用于处理具有副作用的逻辑。
import { ref, watchEffect } from 'vue';
const count = ref(0);
watchEffect(() => {
console.log(`Count is: ${count.value}`);
});
count.value++; // 输出: Count is: 1
watchEffect
会自动跟踪响应式数据的依赖。选择 watch
还是 watchEffect
,取决于具体的使用场景和需求。
watch
的场景watchEffect
的场景watch
import { ref, watch } from 'vue';
const count = ref(0);
const doubled = ref(0);
watch(count, (newVal, oldVal) => {
doubled.value = newVal * 2;
console.log(`Count changed from ${oldVal} to ${newVal}, doubled is now ${doubled.value}`);
});
watchEffect
import { ref, watchEffect } from 'vue';
const count = ref(0);
const doubled = ref(0);
watchEffect(() => {
doubled.value = count.value * 2;
console.log(`Count is: ${count.value}, doubled is now ${doubled.value}`);
});
在这个简单的示例中,watchEffect
更简洁,但在更复杂的场景下,watch
可能更适合。
watch
:适合需要精确控制依赖、访问旧值和新值的场景。watchEffect
:适合简单的副作用逻辑,自动依赖收集和立即执行的场景。通过理解和选择合适的工具,可以更有效地管理和响应数据变化。