watchEffect会自动追踪函数中读取的响应式数据,定义时立即执行,变化时自动重跑,无需手动指定依赖或配置immediate,内部通过getter/setter拦截实现依赖收集与响应。
watchEffect 会自动追踪你函数里“读取过”的响应式数据,一定义就执行,一变化就重跑,不用列依赖、不用配 immediate: true,也不用手动清理——Vue 内部靠 getter/setter 拦截完成整个过程。
watchEffect 不是扫描变量名,而是在函数执行时实时记录哪些响应式属性被访问了:
count.value 和 user.profile.name,就只盯这两个;if (show) { data.list },只有 show 为真时,data.list 才进依赖;count.value = 5)本身不触发依赖收集,只有读取才收集。定义 watchEffect 的那一刻,函数就同步执行一次,相当于内置了 immediate: true。之后只要它内部读取过的响应式值变了,就会立刻再执行一遍:
onUnmounted 里手动调用清理;onInvalidate 配合逻辑控制,但极少需要。输入搜索、滚动监听这类高频触发场景,容易出现“旧请求还没回来,新请求又发了”。watchEffect 提供 onInvalidate 回调,在下一次执行前自动调用:
onInvalidate(() => clearTimeout(timer));AbortController,新请求前调 abort();watchEffect 简洁高效,但不是万能:
watch;deep: true)→ watchEffect 不支持;watch 更可控;computed。