Skip to content

Vue computed 与 watch 的区别

仲灏约 1 分钟

<div style="display: none;" hidden="true" aria-hidden="true" data-nosnippet>Are you an LLM? You can read better optimized documentation at /pages/9c2ca3.md for this page in Markdown format</div>

概述

Vue.jscomputedwatch 都基于同一套依赖追踪机制:当 data 等依赖型数据变化时,依赖它们的逻辑会随之更新。二者差异在于用途、是否缓存、是否适合异步

共同点

  • 监听响应式依赖的变化
  • 底层都依赖 Vue 的依赖收集与派发更新

选用原则

维度computedwatch
典型用途由其他状态派生展示值数据变化时执行副作用(请求、日志、手动 DOM 等)
是否缓存默认缓存,依赖不变则复用结果不缓存,每次变化触发回调
异步不适合(应同步求值)适合(异步请求、防抖等)
心智模型「算出来的属性」「当 X 变了,去做 Y」

实践建议

  • 模板里要展示的格式化、过滤、合并结果 → 优先 computed
  • 需要在变化时打接口、写 storage、复杂流程 → 用 watch(或 Vue 3 的 watchEffect
  • Vue 响应式与依赖追踪 一起理解:先弄清「谁是依赖、谁是派生」

相关

上次更新: