跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客我的书GitHub 精选镜像AI 生图工具UI配色美学关于
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
JavaScript大前端

Vue 3 实战:computed 与 watch 的区别及应用场景

Vue 3 响应式系统中 computed 和 watch 是处理数据变化的核心手段。computed 基于依赖缓存,适合模板中的派生状态计算;watch 侧重监听变化执行副作用或异步操作。两者选择取决于是否需要缓存结果以及是否涉及复杂逻辑。合理使用能提升应用性能和维护性。

NodeJser发布于 2025/2/3更新于 2026/8/2238 浏览
Vue 3 实战:computed 与 watch 的区别及应用场景

Vue.js 作为现代前端框架,其响应式系统让数据驱动视图变得简单。computed 和 watch 是处理数据变化的两大核心手段,虽然都能监听变化,但设计初衷和使用场景截然不同。

computed:缓存的派生状态

computed 的核心在于依赖缓存。它会根据响应式依赖自动追踪变化,只有当依赖项发生改变时才会重新计算。如果依赖没变,多次访问计算属性会直接返回缓存结果,性能开销极小。

这决定了它最适合用于模板中的复杂计算或派生状态。比如根据多个输入字段生成一个展示值,或者对列表进行过滤排序。

new Vue({
  data: { a: 1, b: 2 },
  computed: {
    sum() {
      return this.a + this.b;
    }
  }
});

上面的例子中,只要 a 或 b 不变,sum 就不会重复执行函数体。这种特性让它在渲染层非常高效。

watch:监听副作用与异步操作

相比之下,watch 更像是一个观察者模式实现。它不关心返回值,只关注数据变化后需要执行的副作用。比如发起网络请求、操作 DOM、或者执行耗时较长的逻辑。

由于没有缓存机制,每次触发都会运行回调,因此不适合做纯计算逻辑。

new Vue({
  data: { question: '' },
  watch: {
    question(newQuestion) {
      // 模拟防抖后的异步请求
      this.getAnswer();
    }
  },
  methods: {
    getAnswer() {
      console.log('Fetching answer...');
    }
  }
});

在这个场景中,我们利用 watch 监听输入框变化,并在用户停止输入后触发查询。如果需要深度监听对象内部变化,还可以配合 deep 配置项使用。

实战示例:组合使用

在实际开发中,两者往往配合使用。下面这个组件展示了如何在一个页面里同时利用 computed 做实时计算,用 watch 处理按钮触发的逻辑。

<template>
  <div>
    <input v-model="number" type="number" />
    <p>原始数字:{{ number }}</p>
    <!-- computed 自动更新 -->
    <p>数字的平方(computed):{{ squaredNumber }}</p>
    
    <button @click="findSquareRoot">计算平方根(watch 触发)</button>
    <!-- watch 手动触发 -->
    <p>数字的平方根(watch):{{ squareRoot }}</p>
  </div>
</template>

<script>
export default {
  data() {
    return {
      number: 0,
      squareRoot: 0
    };
  },
  computed: {
    squaredNumber() {
      return this.number * this.number;
    }
  },
  watch: {
    number(newValue) {
      // 监听变化,但不立即计算,而是等待用户点击或其他逻辑
      // 这里仅演示监听器存在
    }
  },
  methods: {
    findSquareRoot() {
      this.squareRoot = Math.sqrt(this.number);
    }
  }
};
</script>

最佳实践建议

  1. 优先选择 computed:只要涉及模板展示的计算,且不需要副作用,尽量用 computed。它的缓存机制能避免不必要的重渲染。
  2. 慎用复杂逻辑:不要在 computed 里写复杂的业务逻辑或异步请求,保持其'纯函数'的特性。
  3. 善用 watch 配置:immediate 可以在初始化时立即执行,deep 可以监听对象深层变化,合理搭配能解决很多边界问题。
  4. 明确职责:计算状态归 computed,处理副作用(如 API 调用、DOM 操作)归 watch。

理解这两者的差异,能帮助我们在设计 Vue 应用时做出更合理的架构决策,既保证性能又提升可维护性。

目录

  1. computed:缓存的派生状态
  2. watch:监听副作用与异步操作
  3. 实战示例:组合使用
  4. 最佳实践建议
  • 免费图片AI生成工具免费生成了解详情
  • Magick API 一键接入全球大模型注册送1000万token查看
  • 免费图片视频在线生成30秒,将你的创意变成现实开始设计
  • X/Twitter免费视频下载器免登陆无限额度免费视频解析下载了解详情
  • 100+免费在线小游戏爽一把
极客日志微信公众号二维码

微信扫一扫,关注极客日志

微信公众号「极客日志V2」,在微信中扫描左侧二维码关注。展示文案:极客日志V2 zeeklog

更多推荐文章

查看全部
  • C++ AVL 树(平衡搜索树)概念讲解与模拟实现
  • Node.js+Vue 政府公用车辆管理系统设计与实现
  • OpenClaw 本地部署与飞书机器人接入指南
  • Claude Code 本地化部署教程:接入 Ollama 实现离线开发
  • Dali T6/T6Pro 救砖实战:macOS/Windows 用 mtkclient 修复 Fastboot 无限重启
  • C++ 多态机制详解:虚函数与动态绑定
  • 零成本部署:国内畅玩 n8n 与私有 AI 模型指南
  • 国内如何付费升级 GitHub Copilot 专业版
  • AI-Goofish-Monitor:闲鱼商品智能监控与自动化分析工具
  • Spring Cloud Gateway Web MVC 使用指南
  • 大模型面经:LoRA 原理与微调实战总结
  • 基于 Llama-Factory 的智能制造工单理解系统
  • 基于 EasyDSS 的无人机视频推流直播技术方案
  • Spatial Joy 2025 全球 AR&AI 开发大赛参赛指南与赛道解析
  • GitHub 上值得关注的计算机视觉开源项目
  • 企业级工作流引擎低代码开发实战:RuoYi-Flowable-Plus 详解
  • 通义万相 2.1 图生视频技术简介与开源资源获取
  • 人工智能:自然语言处理在金融领域的应用与实战
  • 人工智能大模型技术入门与核心原理解析
  • Android 开发面试突击手册与 T9 学习路线指南

相关免费在线工具

  • Keycode 信息

    查找任何按下的键的javascript键代码、代码、位置和修饰符。 在线工具,Keycode 信息在线工具,online

  • Escape 与 Native 编解码

    JavaScript 字符串转义/反转义;Java 风格 \uXXXX(Native2Ascii)编码与解码。 在线工具,Escape 与 Native 编解码在线工具,online

  • JavaScript / HTML 格式化

    使用 Prettier 在浏览器内格式化 JavaScript 或 HTML 片段。 在线工具,JavaScript / HTML 格式化在线工具,online

  • JavaScript 压缩与混淆

    Terser 压缩、变量名混淆,或 javascript-obfuscator 高强度混淆(体积会增大)。 在线工具,JavaScript 压缩与混淆在线工具,online

  • Base64 字符串编码/解码

    将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online

  • Base64 文件转换器

    将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online