计算属性无独立生命周期,其行为由依赖追踪、缓存策略和响应式更新驱动:初始化时在created后、beforeMount前完成依赖收集与首次求值;运行时按需懒执行并缓存;销毁时随组件自动清理。

计算属性本身没有独立的“生命周期”,它依附于 Vue 响应式系统的运行机制,其行为完全由依赖追踪、缓存策略和响应式更新触发。理解它的“生命周期”,本质上是理解它在组件实例生命周期中何时建立、何时求值、何时缓存、何时失效与重建。
初始化阶段:依赖收集与首次求值
在组件创建完成(created)后、挂载前(beforeMount)期间,Vue 会初始化 computed 选项:
- 执行计算函数一次,自动读取其中访问的所有响应式数据(如
ref、reactive属性),完成依赖收集; - 将首次执行结果缓存,并将该缓存值作为计算属性的当前值;
- 此时计算属性已就绪,可在模板或
setup中直接访问,无需等待挂载。
运行阶段:缓存生效与按需更新
计算属性不是每次访问都重新执行,而是严格遵循“懒求值 + 缓存复用”原则:
- 只要所依赖的响应式数据未变化,后续所有读取都直接返回缓存值,不触发函数体执行;
- 一旦某个依赖项被修改(例如
count.value++),Vue 标记该计算属性为“脏(dirty)”; - 下一次访问时,才重新执行函数、更新缓存、并触发视图更新(若该值被模板使用);
- 这个过程发生在任何响应式更新周期内,不受
beforeUpdate或updated钩子约束,而是由依赖变化即时驱动。
销毁阶段:自动清理,无需手动干预
当组件卸载(unmounted)时:
立即学习“前端免费学习笔记(深入)”;
- Vue 会自动解除该计算属性对所有依赖的订阅关系;
- 缓存内容随组件实例一起被垃圾回收;
- 开发者不需要、也不应该在
beforeUnmount或unmounted中手动“销毁”计算属性。
特别注意:与组件生命周期钩子的错位关系
计算属性的活跃期跨越多个钩子,但不与任一钩子严格对齐:
- 它在
created后即存在,早于mounted,因此可在created中安全读取(只要依赖已初始化); - 它可能在
beforeUpdate之前已因依赖变更而变“脏”,但实际重计算发生在首次访问时,未必在钩子内; - 它不会在
beforeUnmount中触发最后一次求值——除非你主动访问它,否则它只是静默解绑。


















