前端实战

翻 Vue 源码看 computed:dirty 标记怎么在副作用嵌套时保持缓存不崩

Vue 的 `computed` 惰性求值并非延迟执行,而是通过 `_dirty` 标记实现“不读不算”。首次访问 `.value` 才触发 getter,之后依赖不变则直接返回缓存。依赖变化时,scheduler 仅将 `_dirty` 置为 `true` 并通知外部,不主动计算。嵌套场景下,信号沿依赖链传递脏标记,最终由消费者反向拉动整条链路重新求值。Vue 3.4 通过 `_dirtyLevel` 和依赖键级追踪,确保复杂分支下依赖收集的正确性,防止缓存崩溃。