vue 3.6测试项目若在组件卸载后仍读取computed,并发现相关实例被长生命周期依赖保留,应先核对是否属于rc14记录的已停止作用域路径,再在rc15验证pr #16114对应修复。该补丁不等于解决所有没有订阅者或没有作用域的computed情形,也不能直接推断生产环境普遍受影响。
先确认实际依赖与触发位置
npm ls vue @vue/runtime-core @vue/reactivity
原帖复现使用3.6.0-rc.14,并以3.5.44对照;这只是该记录的版本范围。检查unmounted、onUnmounted和第三方组件收尾逻辑是否在scope.stop之后读取computed,同时核对锁文件避免测试时混入不同运行时版本。

Vue官方PR说明已停止作用域中的computed修复
用独立作用域检查生命周期
import { computed, effectScope, reactive } from 'vue'
const store = reactive({ theme: 'light' })
const scope = effectScope()
let currentTheme
scope.run(() => {
currentTheme = computed(() => store.theme)
void currentTheme.value
})
scope.stop()
// 对应缺陷关注的是 stop 后再次读取的订阅处理
void currentTheme.value
这段代码只展示读取与停止的顺序,不以一次控制台输出证明是否发生内存泄漏。要比较保留情况,应在测试页面重复挂载卸载,移除调试变量的额外引用,再用浏览器Memory工具检查对象保留链;手动保留currentTheme引用本身也会影响观察。

原始缺陷记录区分卸载读取及无作用域读取
在RC15验证同一复现,避免扩大补丁结论
固定测试工程的Vue及相关运行时为匹配的RC15版本,用相同输入和构建方式复核。PR说明,已停止作用域中的无活动订阅者读取不会再把computed重新挂到已停止scope,必要时释放刚跟踪的依赖并保持dirty供下次重算。
从零开始编排 SpringBoot+Vue 全栈项目工作流,适用于新建全栈项目或完整脚手架请求,触发后依次调用 product‑spec‑builder(需求调研)等模块。
原帖还包含完全没有effect和scope的读取情况,PR明确未全部覆盖。若保留链属于其他路径,应保留最小复现继续定位;不要仅因升级后页面能显示,就报告全部保留对象问题已解决。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!









