当前位置: 首页 > news >正文

在 vue3 和 vue2 中,computed 计算属性和 methods 方法区别是什么

在 Vue 2 和 Vue 3 中,computed(计算属性)和 methods(方法)都是处理数据逻辑的方式,但它们在缓存机制、使用场景、执行时机等方面有显著区别,且这些区别在两个版本中保持一致。

1. 缓存机制(核心区别)

  • computed 计算属性
    会对计算结果进行缓存。只有当依赖的响应式数据发生变化时,才会重新计算;如果依赖数据不变,多次访问计算属性会直接返回缓存的结果,不会重复执行计算逻辑。

    示例(Vue 2/3 通用):

    // 计算属性会缓存结果
    computed: {filteredList() {console.log('computed 执行了');return this.list.filter(item => item.active);}
    }
    

    多次访问 filteredList 时,若 list 未变化,只会打印一次 computed 执行了

  • methods 方法
    没有缓存机制,每次调用都会重新执行函数,无论依赖的数据是否变化。

    示例(Vue 2/3 通用):

    // 方法每次调用都会重新执行
    methods: {getFilteredList() {console.log('method 执行了');return this.list.filter(item => item.active);}
    }
    

    每次调用 getFilteredList() 或在模板中使用 {{ getFilteredList() }} 时,都会打印 method 执行了

2. 使用场景

  • computed
    适合用于基于现有响应式数据派生新数据的场景,尤其是需要频繁访问结果时(如模板中多次引用)。
    例如:数据过滤、格式化(如日期转换)、数值计算(如总价 = 单价 × 数量)等。

  • methods
    适合用于处理业务逻辑、事件处理不需要缓存的场景。
    例如:按钮点击事件、表单提交、一次性数据处理(如获取随机数)等。

3. 调用方式

  • computed
    在模板中使用时不需要加括号,直接作为属性访问(因为它本质是一个被缓存的属性)。
    示例:{{ filteredList }}(而非 {{ filteredList() }})。

  • methods
    在模板中使用时必须加括号(作为函数调用)。
    示例:{{ getFilteredList() }}@click="handleClick()"

4. 依赖追踪

  • computed
    会自动追踪依赖的响应式数据(如 dataprops 中的数据),当依赖变化时自动更新。

  • methods
    不会主动追踪依赖,仅在被调用时执行,其内部使用的响应式数据变化不会触发方法自动执行(除非手动调用)。

总结对比表

特性computed 计算属性methods 方法
缓存有缓存,依赖不变则不重新计算无缓存,每次调用都重新执行
调用方式模板中直接用属性名(不加括号)模板中需加括号(作为函数调用)
适用场景数据派生、过滤、格式化(需频繁访问)事件处理、业务逻辑(无需缓存)
依赖追踪自动追踪依赖,依赖变化自动更新不追踪依赖,需手动调用才执行

一句话总结

computed 是“带缓存的派生属性”,methods 是“无缓存的函数”。根据是否需要缓存和使用场景选择:需要缓存且基于响应式数据派生新数据时用 computed,需要执行动作或不需要缓存时用 methods

http://www.dtcms.com/a/348885.html

相关文章:

  • 打响“A+H”双重上市突围战,云天励飞实力如何?
  • JUC并发编程07 - wait-ify/park-un/安全分析
  • 《CF1120D Power Tree》
  • Spirng Cloud Alibaba主流组件
  • 【ElasticSearch】springboot整合es案例
  • 企业出海第一步:国际化和本地化
  • springBoot如何加载类(以atomikos框架中的事务类为例)
  • JavaScript数据结构详解
  • Docker知识点
  • 【数据分享】中国地势三级阶梯矢量数据
  • 【无标题】对六边形拓扑结构中的顶点关系、着色约束及量子隧穿机制进行严谨论述。
  • 深度剖析Spring AI源码(七):化繁为简,Spring Boot自动配置的实现之秘
  • MySQL--基础知识
  • 基础篇(下):神经网络与反向传播(程序员视角)
  • 多机多卡微调流程
  • Node.js依赖管理与install及run命令详解
  • 【文献阅读】生态恢复项目对生态系统稳定性的影响
  • CI/CD持续集成及持续交付详解
  • Jwt令牌设置介绍
  • 关于熵减 - 电子圆柱
  • feat(compliance): 添加电子商务法技术解读
  • PCB电路设计学习4 PCB图布局 PCB图布线
  • Python - 100天从新手到大师:第十五天函数应用实战
  • HTTP 接口调用工具类(OkHttp 版)
  • 如何用单张gpu跑sglang的数据并行
  • Java全栈开发面试实战:从基础到高并发场景的深度解析
  • MATLAB 与 Python 数据交互:数据导入、导出及联合分析技巧
  • `free` 内存释放函数
  • 【蓝桥杯 2024 省 C】挖矿
  • K8s 实战:六大核心控制器