重学 vue3 中的 computed

computed() 计算属性

接受一个 getter 函数,返回一个只读的 响应式 ref 对象
该 ref 通过 .value 暴露 getter 函数的返回值。它也可以接受一个带有 get 和 set 函数的对象来创建一个可写的 ref 对象。

创建一个只读的计算属性 ref:

const count = ref(1)
const doubleCount = computed(() => count.value * 2);

console.log(doubleCount.value) // 2

doubleCount.value++ // 错误

创建一个可写的计算属性 ref:

const count = ref(1)
const doubleCount = computed({
  get: () => count.value * 2,
  set: (val) => {
    // val doubleCount.value = 5 赋值的值,也就是5
    count.value = val - 1
  }
})

// 只有computed计算出来的值,被赋值时,computed中的set属性定义的函数,才会被执行
doubleCount.value = 5
console.log(count.value) // 4
console.log(doubleCount.value) // 8

计算属性的特性(缓存性,自动更新依赖性)

计算属性值会基于其响应式依赖被缓存

Vue 的计算属性会自动追踪响应式依赖,一个计算属性仅会在其响应式依赖更新时才重新计算。

基于响应式依赖,自动更新计算

const count = ref(1)
const plusOne = computed(() => count.value + 1)

count.value++ // computed依赖的响应式数据发生了变化
console.log(plusOne.value) // 3

基于响应式依赖,computed 不会自动更新

let count = 1;
const doubleCount = computed(() => count * 2);

console.log(doubleCount.value); // 2

count++;
console.log(doubleCount.value); // 2

count = count * 2;
console.log(doubleCount.value); // 2

注意!!注意!!注意!!

computed 属性在 Vue 中是惰性计算的。这意味着它不会在定义时立即执行计算,而是在你首次访问 computed 属性的值时才会进行计算。
计算的结果会被缓存,除非其依赖的响应式数据发生变化,否则在后续的访问中会直接使用缓存的值,不会重新计算。

let count = 1;
const doubleCount = computed(() => count * 2);

count++;

count = count * 2;
// 首次访问 doubleCount computed 属性的值时才会进行计算。
console.log(doubleCount.value); // 8
let count = 1;
const doubleCount = computed(() => count * 2);
// 首次访问
console.log(doubleCount.value); // 2

count++;
// 之后无论 count 怎么变化,doubleCount 都不会发生变化了
console.log(doubleCount.value); // 2

count = count * 2;
// 之后无论 count 怎么变化,doubleCount 都不会发生变化了
console.log(doubleCount.value); // 2

computed 计算属性 最佳实践

Getter 不应有副作用

计算属性的 getter 应只做计算而没有任何其他的副作用,这一点非常重要,请务必牢记。
举例来说,不要改变其他状态、不要在 getter 中做异步请求或者更改 DOM!
一个计算属性的声明中描述的是如何根据其他值派生一个值。因此 getter 的职责应该仅为计算和返回该值。

避免直接修改计算属性值

从计算属性返回的值是派生状态。可以把它看作是一个“临时快照”,每当源状态发生变化时,就会创建一个新的快照。
更改快照是没有意义的,因此计算属性的返回值应该被视为只读的,并且永远不应该被更改。
应该更新它所依赖的源状态以触发新的计算。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【devops】 阿里云挂载云盘 | 扩展系统硬盘 | 不重启服务器增加硬盘容量

扩容分区和文件系统(Linux) 文档地址 https://help.aliyun.com/zh/ecs/user-guide/extend-the-partitions-and-file-systems-of-disks-on-a-linux-instance?spm5176.smartservice_service_robot_chat_new.help.dexternal.4ac4f625Ol66kL#50541782adxmp…

12.基础乐理-半音、全音

音是有高有底的,音的震动频率越高、音的赫兹越高,我们就说这个音越高,钢琴从左到右,音是逐渐变高的,因变高,它的频率,Hz数是在增加的,如下图: 但是赫兹它动不动就是几百几…

计算机视觉——手机目标检测数据集

这是一个手机目标检测的数据集,数据集的标注工具是labelimg,数据格式是voc格式,要训练yolo模型的话,可以使用脚本改成txt格式,数据集标注了手机,标签名:telephone,数据集总共有1960张,有一部分是…

中医优势病种诊疗方案数据库

中医诊疗方案结合了几千年的实践经验与理论体系,形成了一套独特的诊疗方法。随着国家对中医药事业的重视,多个中医诊疗方案被国家卫生健康委员会和国家中医药管理局等权威机构正式发布,这对规范中医临床诊疗行为,提升医疗服务质量…

汽车视频智能剪辑解决方案,满足用户对高品质汽车视频的追求

随着汽车智能化和互联网技术的快速发展,车载视频已经成为现代驾驶生活不可或缺的一部分。然而面对海量的行车视频,如何高效地剪辑、整理并分享这些精彩瞬间,一直是车主和汽车内容创作者们所面临的难题。美摄科技,作为领先的视频智…

C语言-输入数,存入数组,将奇数放置数组左侧,将偶数放置数组右侧

一 主要涉及到的知识点: 1.1 for循环 1.2 计算数组的大小int sz sizeof(arr) / sizeof(arr[0]); 1.3 函数的定义使用 1.4 while()循环 二 源代码: //输入一个整数数组,实现一个函数 //来调整该数组中数字的顺序使得数组中所有的奇数位与数组的前半部分, //所有的偶数位于…

STM32应用开发——BH1750光照传感器详解

STM32应用开发——BH1750光照传感器详解 目录 STM32应用开发——BH1750光照传感器详解前言1 硬件介绍1.1 BH1750简介1.2 硬件接线 2 软件编程2.1 软件原理2.1.1 IIC设备地址2.1.2 IIC读写2.1.3 BH1750指令集2.1.4 BH1750工作流程2.1.5 BH1750测量模式 2.2 测试代码2.3 运行测试…

2024基于PHP开发的微信抖音小程序点餐系统开发源代码案例

最近新开发了一套小程序点餐系统,用户点餐之后可以选择堂食或者是外卖到家,这套系统主要功能有,产品展示,支付系统,外卖配送,用户系统,积分系统,商家管理系统,抽奖系统&a…

STM32 CAN过滤器细节

STM32 CAN过滤器细节 简介 每组筛选器包含2个32位的寄存器,分别为CAN_FxR1和CAN_FxR2,它们用来存储要筛选的ID或掩码 四种模式 模式说明32位掩码模式CAN_FxR1存储ID, CAN_FxR2存储哪个位必须要与CAN_FxR1中的ID一致 , 2个寄存器…

具有图形化衬底与空气腔反射镜混合结构的深紫外Micro-LED阵列芯片

具有倾斜侧壁结构的深紫外Micro-LED的侧壁反射率是影响器件光提取效率的重要因素。由于TM模式偏振光在发生全反射时,产生的倏逝波诱导的金属表面等离子激元降低了倾斜侧壁处的集成全向反射镜(ODR)的反射率,从而导致光提取效率降低…

【安全】查杀linux挖矿病毒 kswapd0

中毒现象 高cpu占用,使用top命令查看cpu使用率长时间50%以上,cpu占用异常的进程八成就是挖矿病毒进程 此病毒隐藏了自己,top命令无法查看到挖矿病毒进程,可通过sysdig命令找到隐藏进程 安装sysdig curl -s https://s3.amazonaw…

java大作业(9)--实现银行基本操作(第一遍)

一.题目: 二.代码: 实现代码: import java.util.Date; //银行账户类 class Account{public String accountid;public String name;public double balance;public Date creatTime;public Account(String accountid,String name, double bala…

虚拟天空解决方案,创造出令人惊叹的换天效果

在汽车视频领域,如何打破传统拍摄限制,呈现出更具创意和想象力的画面,成为众多企业和创作者追求的目标。美摄科技作为业界领先的视频技术提供商,凭借其强大的AI技术和三维渲染引擎,推出了全新的虚拟天空解决方案&#…

MediaStream使用webRtc多窗口传递

最近在做音视频通话,有个需求是把当前会话弄到另一个窗口单独展示,但是会话是属于主窗口的,多窗口通信目前不能直接传递对象,所以想着使用webRtc在主窗口和兄弟窗口建立连接,把主窗口建立会话得到的MediaStream传递给兄…

分布式搭载博客网站

一.运行环境: IP主机名系统服务192.168.118.128Server-WebLinuxWeb192.168.118.131Server-NFS-DNSLinuxNFS/DNS 二.基础配置 1. 配置主机名,hosts映射 [rootserver ~]# hostnamectl set-hostname Server-Web [rootserver ~]# hostname Server-Web [r…

大模型LLM架构--Decoder-Only、Encoder-Only、Encoder-Decoder

目录 1 LLM演变进化树 2 每种架构的优缺点 2.1 Decoder-Only 架构 2.2 Encoder-Only 2.3 Encoder-Decoder 参考文献: 1 LLM演变进化树 基于 Transformer 模型以非灰色显示:decoder-only 模型在右边的浅蓝色分支,encoder-only 模型在粉色…

【学习】测试新项目该如何高效的展开测试?需要做哪些规划?

当我们收到测试项目时,如何高效地展开测试是我们作为测试人员所要面临的一大挑战。测试是软件开发过程中不可或缺的一环,它确保了产品的质量,降低了出现问题的风险,提高了用户的满意度。因此,我们需要制定合理的测试计…

操作教程丨MaxKB+Ollama:快速构建基于大语言模型的本地知识库问答系统

2024年4月12日,1Panel开源项目组正式对外介绍了其官方出品的开源子项目——MaxKB(github.com/1Panel-dev/MaxKB)。MaxKB是一款基于LLM(Large Language Model)大语言模型的知识库问答系统。MaxKB的产品命名内涵为“Max …

java对接IPFS系统-以nft.storage为列

引言 之前我们已经说过了、NFT.Storage是一个基于IPFS的分布式存储服务,专门用于存储和管理非同质化代币(NFT)相关的数据和资产。它是由Protocol Labs和Pinata共同推出的服务。今天我们基于nft.storage为列、使用java对接打通这个ipfs分布式存…

成为程序员后的领悟与展望-ApiHug

🤗 ApiHug {Postman|Swagger|Api...} 快↑ 准√ 省↓ GitHub - apihug/apihug.com: All abou the Apihug apihug.com: 有爱,有温度,有质量,有信任ApiHug - API design Copilot - IntelliJ IDEs Plugin | Marketplace 选择一个…
最新文章