Vue学习笔记集--computed

computed

在 Vue 3 的 Composition API 中,computed 用于定义响应式计算属性

它的核心特性是自动追踪依赖缓存计算结果(依赖未变化时不会重新计算)


基本用法

1. 定义只读计算属性
import { ref, computed } from 'vue';const count = ref(0);
const doubleCount = computed(() => count.value * 2); // 返回一个 Ref 对象console.log(doubleCount.value); // 0 → 初始值
count.value = 2;
console.log(doubleCount.value); // 4 → 自动更新
2. 在模板中使用
<template><div>{{ doubleCount }}</div> <!-- 自动解包,无需 .value -->
</template>

computed 的响应式依赖

  • 自动追踪依赖:计算属性会追踪其内部使用的所有响应式变量(如 refreactive)。
  • 缓存机制:只有依赖变化时才会重新计算,否则直接返回缓存值。
const a = ref(1);
const b = ref(2);
const sum = computed(() => a.value + b.value);a.value = 3; // sum 自动重新计算 → 3 + 2 = 5
b.value = 4; // sum 再次计算 → 3 + 4 = 7

可写计算属性(Setter)

computed 可以接受一个包含 getset 的对象,实现双向绑定:

const firstName = ref('John');
const lastName = ref('Doe');// 可写计算属性
const fullName = computed({get: () => `${firstName.value} ${lastName.value}`,set: (newValue) => {const [first, last] = newValue.split(' ');firstName.value = first;lastName.value = last;},
});// 修改计算属性
fullName.value = 'Jane Smith'; // 自动更新 firstName 和 lastName
console.log(firstName.value); // 'Jane'
console.log(lastName.value); // 'Smith'

reactive 结合使用

将计算属性绑定到 reactive 对象中:

import { reactive, computed } from 'vue';const state = reactive({price: 100,quantity: 2,
});// 计算总价
state.total = computed(() => state.price * state.quantity);console.log(state.total.value); // 200

性能优化:避免重复计算

计算属性会缓存结果,以下场景体现优势:

const list = ref([1, 2, 3, 4, 5]);// 计算过滤后的列表(只有 list 变化时重新计算)
const evenNumbers = computed(() => list.value.filter(num => num % 2 === 0));list.value.push(6); // evenNumbers 自动更新为 [2,4,6]

注意事项

  1. 避免副作用:计算属性应是纯函数,不要在其中修改外部状态。

    // ❌ 错误示例(副作用)
    const invalidComputed = computed(() => {count.value++; // 禁止修改依赖!return count.value;
    });
    
  2. 依赖非响应式数据:如果依赖非响应式变量,计算属性不会更新:

    let staticValue = 10;
    const badComputed = computed(() => staticValue); // 不会更新!
    
  3. 性能敏感场景:复杂计算建议使用 computed 缓存结果,而非在模板中直接调用方法。


与 Vue 2 的对比

特性Vue 2 的 computedVue 3 的 computed
定义位置computed 选项setup 中通过函数定义
返回值类型直接通过属性访问Ref 对象(需 .value 访问)
响应式依赖追踪自动自动
可写性不支持 Setter支持 Setter

完整示例

<template><div><input v-model="price" type="number" placeholder="价格"><input v-model="quantity" type="number" placeholder="数量"><p>总价: {{ total }}</p><button @click="resetTotal">重置总价</button></div>
</template><script setup>
import { ref, computed } from 'vue';const price = ref(0);
const quantity = ref(0);// 计算总价
const total = computed({get: () => price.value * quantity.value,set: (value) => {price.value = value / 2;quantity.value = 2;},
});// 通过 Setter 修改计算属性
const resetTotal = () => {total.value = 0; // 触发 Setter → price=0, quantity=0
};
</script>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/899481.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

飞致云荣获“Alibaba Cloud Linux最佳AI镜像服务商”称号

2025年3月24日&#xff0c;阿里云云市场联合龙蜥社区发布“2024年度Alibaba Cloud Linux最佳AI镜像服务商”评选结果。 经过主办方的严格考量&#xff0c;飞致云&#xff08;即杭州飞致云信息科技有限公司&#xff09;凭借旗下MaxKB开源知识库问答系统、1Panel开源面板、Halo开…

Vue如何利用Postman和Axios制作小米商城购物车----简版

实现功能&#xff1a;全选、单选、购物数量显示、合计价格显示 实现效果如下&#xff1a; 思路&#xff1a; 1.数据要利用写在Postman里面&#xff0c;通过地址来调用Postman里面的数据。 2.写完数据后&#xff0c;给写的数据一个名字&#xff0c;然后加上一个空数组&#xf…

第一篇:系统分析师首篇

目录 一、目标二、计划三、完成情况1.宏观思维导图2.过程中的团队管理和其它方面的思考 四、意外之喜(最少2点)1.计划内的明确认知和思想的提升标志2.计划外的具体事情提升内容和标志 一、目标 通过参加考试&#xff0c;训练学习能力&#xff0c;而非单纯以拿证为目的。 1.在复…

CSS学习笔记4——盒子模型

目录 盒子模型是什么&#xff1f; 盒子模型的组成 一、div标签 二、边框属性 1、border-style:边框样式 2、border-width:边框宽度 3、border-color:边框颜色、border&#xff1a;综合设置 4、border-radius:圆角边框 5、border-image&#xff1a;图像边框 三、边距属性…

复现文献中的三维重建图像生成,包括训练、推理和可视化

要复现《One - 2 - 3 - 45 Fast Single Image to 3D Objects with Consistent Multi - View Generation and 3D Diffusion (CVPR)2024》文献中的三维重建图像生成&#xff0c;包括训练、推理和可视化&#xff0c;并且确保代码能正常运行&#xff0c;下面是基本的实现步骤和示例…

stable diffusion 本地部署教程 2025最新版

前提&#xff1a; 需要环境 git git下载地址Git - Downloading Package ​ 直接装即可 python3.10.6 下载地址 Python Release Python 3.10.6 | Python.org ​ 记得python环境一定要3.10.6&#xff01;&#xff01;&#xff01; 第一个版本 项目地址https://github.…

【二刷代码随想录】螺旋矩阵求解方法、推荐习题

一、求解方法 &#xff08;1&#xff09;按点模拟路径 在原有坐标的基准上&#xff0c;叠加 横纵坐标 的变化值&#xff0c;求出下一位置&#xff0c;并按题完成要求。但需注意转角的时机判断&#xff0c;特别是最后即将返回上一出发点的位置。 &#xff08;2&#xff09;按层…

从Manus到OpenManus:AI智能体技术如何重塑未来生活场景?

从Manus到OpenManus&#xff1a;AI智能体技术如何重塑未来生活场景&#xff1f; 一、现状&#xff1a;AI智能体技术面临的三大核心矛盾 &#xff08;通过分析用户高频痛点与市场反馈提炼&#xff09; 能力与门槛的失衡 Manus展示的复杂任务处理能力&#xff08;如股票分析、代…

迭代器与可迭代对象

概念层面&#xff1a; 可迭代对象&#xff1a; 一个可迭代对象是指任何可以返回一个迭代器的对象。换句话说&#xff0c;它实现了 __iter__() 方法 比如&#xff1a;列表、元组、字典、字符串、集合等 直接通过 for 循环使用&#xff0c;因为 for 循环内部会调用其 __iter__(…

总结PostgreSQL创建数据库失败的解决办法

作者&#xff1a;朱金灿 来源&#xff1a;clever101的专栏 系统环境是Windows 11 专业版&#xff0c;PostgreSQL版本是17。在运行sql语句创建数据库时出现错误&#xff1a; 閿欒: template database \"template1\" has a collation version mismatch DETAIL: Th…

Mybatis源码 插件机制

简介 插件是一种常见的扩展方式&#xff0c;大多数开源框架也都支持用户通过添加自定义插件的方式来扩展或者改变原有的功能&#xff0c;MyBatis中也提供的有插件&#xff0c;虽然叫插件&#xff0c;但是实际上是通过拦截器(Interceptor)实现的&#xff0c;在MyBatis的插件模块…

Android14 SystemUI中添加第三方AIDL

由于特殊需求&#xff0c;需要在SystemUI中添加第三方AIDL&#xff0c;去做一些客制化的修改。现在记录一下AIDL添加的过程。 1.将AIDL文件拷贝到frameworks/base/packages/SystemUI/src/下&#xff0c;我要添加的AIDL文件是com/test/myctr/IDevicectr.aidl&#xff0c;添加后的…

Binlog、Redo log、Undo log的区别

一、binlog和redo log的区别 特性binlogredo log记录对象记录的是 MySQL 服务器的事务操作&#xff0c;针对的是整个数据库实例。记录的是 InnoDB 存储引擎的数据页变化&#xff0c;针对的是具体的存储引擎层面。记录内容记录的是事务的逻辑操作&#xff0c;例如 SQL 语句&…

TDengine 中的异常恢复

简介 本章主要介绍在 TDengine 执行命令过程中发生异常&#xff0c;如何手工终于执行的任务。可以终止连接&#xff0c;线上查询及终止事务。 如果一个事务 在一个复杂的应用场景中&#xff0c;连接和查询任务等有可能进入一种错误状态或者耗时过长迟迟无法结束&#xff0c;…

全球化2.0 | ZStack举办香港Partner Day,推动AIOS智塔+DeepSeek海外实践

2025年3月21日&#xff0c;云轴科技ZStack在香港成功举办了主题为“ZStack AIOS 智塔与 DeepSeek 私有化方案介绍及企业应用落地实践”的 Partner Day 活动。此次活动吸引了众多海外合作伙伴&#xff0c;共同探讨 AI Infra 平台在企业私有化 AI 中的应用与价值闭环。 ZStack CT…

ERP、MES和CRM三大企业系统的详细介绍及对比分析

以下是关于ERP、MES和CRM三大企业系统的详细介绍及对比分析&#xff1a; 1. ERP&#xff08;企业资源计划&#xff0c;Enterprise Resource Planning&#xff09; 核心功能&#xff1a; 集成管理&#xff1a;财务、采购、库存、生产、人力资源等核心业务流程资源优化&#xf…

(二十)Dart 中的多态

Dart 中的多态教程 一、多态的概念 多态是面向对象编程中的一个重要概念。它允许将子类类型的指针赋值给父类类型的指针&#xff0c;同一个函数调用会有不同的执行效果。换句话说&#xff0c;子类的实例可以赋值给父类的引用。多态的核心在于父类定义一个方法不去实现&#x…

【C++初阶】第12课—list

文章目录 1. list的构造2. list迭代器的常见接口2.1 list遍历的迭代器接口2.2 list修改数据的迭代器接口2.3 list排序、逆序、合并相关操作的成员函数 3. 模拟实现list3.1 模拟实现list的构造3.2 模拟实现list的尾插3.3 模拟实现迭代器iterator3.4 模拟实现list的插入删除3.5 模…

思维链技术(Chain-of-Thought, CoT)

思维链&#xff08;Chain-of-Thought, CoT&#xff09;是一种通过模拟人类逐步推理过程来提升大型语言模型&#xff08;LLM&#xff09;复杂任务表现的技术。其核心思想是让模型在生成最终答案前&#xff0c;先输出中间推理步骤&#xff0c;从而增强逻辑性和可解释性。 1. 基础…

谷粒微服务高级篇学习笔记整理---异步线程池

多线程回顾 多线程实现的4种方式 1. 继承 Thread 类 通过继承 Thread 类并重写 run() 方法实现多线程。 public class MyThread extends Thread {Overridepublic void run() {System.out.println("线程运行: " Thread.currentThread().getName());} }// 使用 pub…