watchEffect() 自动追踪依赖的副作用

最后更新:2026-10-22

watchEffect() 自动追踪依赖的副作用

watchEffect() 立即执行传入的函数,并自动追踪其中用到的响应式数据:依赖变化即重新执行。

分组响应式·核心
类型API
作用域组件内
Vue 版本3.0+
SSR 支持支持

📝 语法

watchEffect(() => {
  document.title = `${count.value} 次点击`  // 自动追踪 count
})

// 需要清理时接收 onCleanup 函数
watchEffect((onCleanup) => { const t = setTimeout(fn, 500); onCleanup(() => clearTimeout(t)) })

⚙️ 参数

effect副作用函数,接收 onCleanup 注册清理逻辑
optionsflush(pre|post|sync)/ onTrack / onTrigger

返回值:停止侦听的函数 stop()

▶ 示例

修改下面的代码,在预览区实时查看效果:

输出:

挂载时标题即变为「0 次点击」,每次点击后同步更新。

💡 要点

💡 提示 不用手写依赖列表:写代码顺序无关,读到谁就追踪谁。
ℹ️ 说明 拿不到旧值:需要对比新旧值时改用手动声明源的 watch()。
⚠️ 注意 副作用里发请求要配 onCleanup 取消旧请求,否则快速变化会产生竞态。
更多案例即将上线。

📚 相关教程

❓ 常见问题

Q watchEffect 和 watch 怎么选?
A 依赖简单、不需要旧值 → watchEffect(代码更短);需要旧值、需要精确控制依赖或惰性执行 → watch。
Q 为什么函数里没用到的数据变化也会执行?
A 只有被读取的响应式数据才被追踪——若在条件分支里读取,依赖会随执行路径变化。
Q watchEffect 能停止吗?
A 能,返回的 stop() 调用后即停止;组件卸载时也会自动停止。
Web-Tutorial.com

Web-Tutorial 技术团队

由多位开发者共同维护的编程教程平台。每篇教程由对应领域的开发者编写和审核,确保内容准确可靠。如发现任何问题,欢迎向我们反馈。

100%

🙏 帮我们做得更好

我们是刚上线的编程教程站,几个人的小团队,精力有限。页面虽经检查,难免还有疏漏——链接失效、排版错乱、内容有误、语言生硬……

如果您发现了,麻烦告诉我们,我们会在收到反馈后第一时间进行修复,再次感谢您的光临 🙏