Vue 中 computed 和 watch 的差异

本文涉及的产品
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
可观测链路 OpenTelemetry 版,每月50GB免费额度
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
简介: Vue 中的 `computed` 和 `watch` 都用于处理数据变化,但使用场景不同。`computed` 用于计算属性,依赖于其他数据自动更新;`watch` 用于监听数据变化,执行异步或复杂操作。
  1. 定义与基本功能
    • computed(计算属性)
      • 定义:计算属性是基于Vue实例的响应式数据(如data中的属性)进行计算得到的值。它会根据依赖的数据自动缓存计算结果,只有当依赖的数据发生变化时,才会重新计算。
      • 示例:假设我们有一个商品列表,每个商品有价格和数量,我们想计算总价。可以在Vue组件中这样定义计算属性:
          export default {
                 
              data() {
                 
                  return {
                 
                      products: [
                          {
                 price: 10, quantity: 2},
                          {
                 price: 20, quantity: 3}
                      ]
                  };
              },
              computed: {
                 
                  totalPrice() {
                 
                      return this.products.reduce((total, product) => {
                 
                          return total + (product.price * product.quantity);
                      }, 0);
                  }
              }
          }
        
    • watch(侦听器)
      • 定义:侦听器主要用于观察和响应Vue实例中数据的变化。当被观察的数据发生变化时,会执行相应的回调函数。它更侧重于数据变化后的异步操作或副作用。
      • 示例:如果我们想在用户输入的搜索关键词变化时,发送一个API请求获取相关商品列表,可以这样使用侦听器:
          export default {
                 
              data() {
                 
                  return {
                 
                      searchTerm: '',
                      productList: []
                  };
              },
              watch: {
                 
                  searchTerm(newValue, oldValue) {
                 
                      // 发送API请求获取相关商品列表
                      this.fetchProducts(newValue);
                  }
              },
              methods: {
                 
                  fetchProducts(term) {
                 
                      // 模拟API请求
                      axios.get(`/api/products?search=${
                   term}`).then(response => {
                 
                          this.productList = response.data;
                      });
                  }
              }
          }
        
  2. 依赖追踪与更新机制
    • computed
      • 依赖追踪:计算属性会自动追踪其内部使用的响应式数据作为依赖。在上述总价计算的例子中,totalPrice计算属性依赖于products数组中的每个product对象的pricequantity属性。Vue会自动检测这些依赖,当其中任何一个依赖发生变化时,就会重新计算totalPrice
      • 缓存机制:计算属性具有缓存特性。如果多次访问计算属性,只要其依赖的数据没有变化,就会直接返回缓存的结果,而不会重新计算。这在性能上是很有优势的,特别是当计算过程比较复杂时。例如,计算属性totalPrice在组件首次渲染时计算一次,只要products数据没有变化,后续对totalPrice的访问都会使用缓存的结果。
    • watch
      • 手动观察特定数据:与计算属性不同,watch需要手动指定要观察的数据。在watch选项中定义的每个属性,就是要观察的数据。当这些数据发生变化时,对应的回调函数就会被执行。例如,在搜索关键词的例子中,我们明确地告诉Vue要观察searchTerm数据的变化。
      • 每次变化都执行回调:只要被观察的数据发生变化,watch中的回调函数就会执行。它不会像计算属性那样缓存结果,每次变化都会触发相应的操作。这使得watch更适合用于处理数据变化后的异步操作,如发送网络请求、更新外部存储等。
  3. 使用场景与最佳实践
    • computed
      • 适用于数据的派生计算:当需要根据已有的响应式数据计算出一个新的值,并且这个值在模板中需要频繁使用时,计算属性是很好的选择。例如,格式化日期、拼接字符串、计算复杂的数学公式等场景。除了前面提到的总价计算,还可以用于将用户输入的姓名和姓氏拼接成完整姓名等操作。
      • 保持计算逻辑的纯净性:计算属性应该只用于计算,不应该产生副作用。它的计算结果应该只依赖于响应式数据,并且不应该修改这些数据。这样可以保证计算属性的行为是可预测的,便于调试和维护。
    • watch
      • 响应数据变化后的异步操作:当需要在数据变化后执行异步操作,如与后端API交互、操作DOM(虽然在Vue中尽量避免直接操作DOM)等,watch是合适的工具。例如,在用户修改表单数据后,实时验证数据并向用户反馈验证结果;或者在地图组件中,当用户缩放级别变化时,重新加载地图数据。
      • 深度观察复杂数据结构:对于复杂的数据结构(如嵌套对象或数组),可以通过设置deep选项来深度观察数据的变化。不过,深度观察可能会导致性能问题,因为它会递归地检查数据的每一个子属性。所以在使用时要谨慎考虑,只有当确实需要对复杂数据结构的所有变化做出响应时才使用。
相关文章
|
5天前
|
存储 人工智能 弹性计算
阿里云弹性计算_加速计算专场精华概览 | 2024云栖大会回顾
2024年9月19-21日,2024云栖大会在杭州云栖小镇举行,阿里云智能集团资深技术专家、异构计算产品技术负责人王超等多位产品、技术专家,共同带来了题为《AI Infra的前沿技术与应用实践》的专场session。本次专场重点介绍了阿里云AI Infra 产品架构与技术能力,及用户如何使用阿里云灵骏产品进行AI大模型开发、训练和应用。围绕当下大模型训练和推理的技术难点,专家们分享了如何在阿里云上实现稳定、高效、经济的大模型训练,并通过多个客户案例展示了云上大模型训练的显著优势。
|
8天前
|
存储 人工智能 调度
阿里云吴结生:高性能计算持续创新,响应数据+AI时代的多元化负载需求
在数字化转型的大潮中,每家公司都在积极探索如何利用数据驱动业务增长,而AI技术的快速发展更是加速了这一进程。
|
5天前
|
人工智能 运维 双11
2024阿里云双十一云资源购买指南(纯客观,无广)
2024年双十一,阿里云推出多项重磅优惠,特别针对新迁入云的企业和初创公司提供丰厚补贴。其中,36元一年的轻量应用服务器、1.95元/小时的16核60GB A10卡以及1元购域名等产品尤为值得关注。这些产品不仅价格亲民,还提供了丰富的功能和服务,非常适合个人开发者、学生及中小企业快速上手和部署应用。
|
14天前
|
人工智能 弹性计算 文字识别
基于阿里云文档智能和RAG快速构建企业"第二大脑"
在数字化转型的背景下,企业面临海量文档管理的挑战。传统的文档管理方式效率低下,难以满足业务需求。阿里云推出的文档智能(Document Mind)与检索增强生成(RAG)技术,通过自动化解析和智能检索,极大地提升了文档管理的效率和信息利用的价值。本文介绍了如何利用阿里云的解决方案,快速构建企业专属的“第二大脑”,助力企业在竞争中占据优势。
|
15天前
|
自然语言处理 数据可视化 前端开发
从数据提取到管理:合合信息的智能文档处理全方位解析【合合信息智能文档处理百宝箱】
合合信息的智能文档处理“百宝箱”涵盖文档解析、向量化模型、测评工具等,解决了复杂文档解析、大模型问答幻觉、文档解析效果评估、知识库搭建、多语言文档翻译等问题。通过可视化解析工具 TextIn ParseX、向量化模型 acge-embedding 和文档解析测评工具 markdown_tester,百宝箱提升了文档处理的效率和精确度,适用于多种文档格式和语言环境,助力企业实现高效的信息管理和业务支持。
3936 2
从数据提取到管理:合合信息的智能文档处理全方位解析【合合信息智能文档处理百宝箱】
|
5天前
|
算法 安全 网络安全
阿里云SSL证书双11精选,WoSign SSL国产证书优惠
2024阿里云11.11金秋云创季活动火热进行中,活动月期间(2024年11月01日至11月30日)通过折扣、叠加优惠券等多种方式,阿里云WoSign SSL证书实现优惠价格新低,DV SSL证书220元/年起,助力中小企业轻松实现HTTPS加密,保障数据传输安全。
505 3
阿里云SSL证书双11精选,WoSign SSL国产证书优惠
|
11天前
|
安全 数据建模 网络安全
2024阿里云双11,WoSign SSL证书优惠券使用攻略
2024阿里云“11.11金秋云创季”活动主会场,阿里云用户通过完成个人或企业实名认证,可以领取不同额度的满减优惠券,叠加折扣优惠。用户购买WoSign SSL证书,如何叠加才能更加优惠呢?
986 3
|
9天前
|
机器学习/深度学习 存储 人工智能
白话文讲解大模型| Attention is all you need
本文档旨在详细阐述当前主流的大模型技术架构如Transformer架构。我们将从技术概述、架构介绍到具体模型实现等多个角度进行讲解。通过本文档,我们期望为读者提供一个全面的理解,帮助大家掌握大模型的工作原理,增强与客户沟通的技术基础。本文档适合对大模型感兴趣的人员阅读。
415 17
白话文讲解大模型| Attention is all you need
|
3天前
|
数据采集 人工智能 API
Qwen2.5-Coder深夜开源炸场,Prompt编程的时代来了!
通义千问团队开源「强大」、「多样」、「实用」的 Qwen2.5-Coder 全系列,致力于持续推动 Open Code LLMs 的发展。
|
9天前
|
算法 数据建模 网络安全
阿里云SSL证书2024双11优惠,WoSign DV证书220元/年起
2024阿里云11.11金秋云创季火热进行中,活动月期间(2024年11月01日至11月30日),阿里云SSL证书限时优惠,部分证书产品新老同享75折起;通过优惠折扣、叠加满减优惠券等多种方式,阿里云WoSign SSL证书将实现优惠价格新低,DV SSL证书220元/年起。
561 5