Vue3中的computed,watch和watchEffect的特点

1.computed
1)computed拥有缓存性,多次调用会直接从缓存中获取,而不会重新执行,只有相依赖的数据发生改变才会重新计算,所以说computed性能很高。
例:下面是同时调用三次计算属性firstTotal和三次函数firstTotalFun()的运行结果。可以发现,函数被执行了三次,而计算属性只被执行了一次。
在这里插入图片描述
代码:

<template><view class="container"><view class="item"><view>商品:</view><input type="text" v-model="firstGoods"></view><view class="item"><view>价格:</view><input type="text" v-model="firstPrice"></view><view class="item"><view>数量:</view><input type="text" v-model="firstNum"></view><view class="item"><view>总价格:</view><view>{{firstTotal}}, {{firstTotalFun()}}</view><view>{{firstTotal}}, {{firstTotalFun()}}</view><view>{{firstTotal}}, {{firstTotalFun()}}</view></view></view>
</template>
<script setup>
import { computed,ref } from 'vue';
let firstNum = ref(0)
let firstGoods = ref('')
let firstPrice = ref(0)
//计算属性
const firstTotal = computed(()=>{console.log("computed调用了");return firstPrice.value*firstNum.value})//普通函数
const firstTotalFun = ()=>{console.log("Function调用了")return firstPrice.value*firstNum.value
}
</script>

2)computed是只读的,不要去修改它,会报警告。
结果:
在这里插入图片描述
代码:
在这里插入图片描述
3)computed只能进行同步操作
4)computed在页面初始化加载的时候就会被立刻调用
5)必须要有返回值(return),如果代码只有一行也可以使用简写。

//正常写法
const firstTotal = computed(()=>{return firstPrice.value*firstNum.value})
//简写
const firstTotal = computed(()=>firstPrice.value*firstNum.value)

2.watch
1)watch可以监听到前一次的值和最新值。
结果:
在这里插入图片描述
代码:

let firstWatch = ref(0);
watch(firstWatch, (newValue,oldValue)=>{console.log("调用了watch:",newValue,oldValue)
});

2)如果需要监听对象类型具体属性的变化,需要设置deep:true,或者使用 “对象.value”。如下:

let goods = ref({name:'',price:0,num:0});
//法一:
watch(goods, (newValue,oldValue)=>{console.log("调用了watch:",newValue,oldValue)
},{deep:true});
//法二:
watch(goods.value, (newValue,oldValue)=>{console.log("调用了watch:",newValue,oldValue)
};

运行结果:
在这里插入图片描述
3)watch属性可以使用异步。(call一些api)
4) watch在页面初始化加载的时候不会被立刻调用,只有在监听的数据发生变化的时候才会调用。如果想要让他立刻调用可以添加immediate: true

watch(source,(newValue, oldValue) => {// 初始化的时候执行,且当 `source` 改变时再次执行},{ immediate: true }
)
  1. watchEffect
    1)watchEffect资料上说不需要指定具体属性,只要是watchEffect里面使用的数据,都可以进行深层次的监听(可以监听到对象中每个属性的变化)。但是经过测试,发现只会监听使用到的对象的具体的属性,如下图代码,我在watchEffect方法中打印了goods.value和goods.value.name,但只有当我在name输入框中输入数据的时候才会出现打印结果,price,和num输入框都无法触发监听。不知为啥,欢迎交流。
let goods = ref({name:'',price:0,num:0});
watchEffect(()=>{console.log("调用了watchEffect",goods.value.name,goods.value)
})

在这里插入图片描述
2) 可以进行异步操作
3)在页面初始化加载的时候会被立刻调用,与watch的immediate类似。

补充:
computed是多对一,一般多个属性变化,会影响到一个属性的时候用computed。computed不可以使用异步。
watch是一对多,一般有一个属性变化,会影响到多个数据的时候使用watch。watch可以使用异步。

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

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

相关文章

扬帆出海扩规模,仍是比亚迪未来的发展关键?

又到了新能源车企公布阶段性成果的时期。 日前&#xff0c;乘联会预估2024年3月全国新能源乘用车厂商批发销量82万辆&#xff0c;同比增长33%&#xff0c;环比增长84%。其中&#xff0c;比亚迪继续领跑&#xff0c;3月销量超30万辆&#xff0c;环比增长147.8%&#xff0c;而这…

简单用Nodejs + express 编写接口

文章目录 get接口示范post接口示范注意点 准备工作可以看上一篇文章&#xff1a;文章链接》》 get接口示范 app.get(/, (req, res) > {res.send("Hello World"); })因为是get接口&#xff0c;所以可以直接在浏览器上请求&#xff08;端口地址接口名&#xff09;…

测开面经(Git经典题目,Git入门)

1. GitHub是什么 a. Git是一个分布式版本控制系统&#xff0c;作用是跟踪、管理和协调软件开发项目中的代码更改。 b. 提供了一种有效的方式来管理代码的版本历史&#xff0c;以及多人协作开发的能力。 2. Git的作用有哪些 a. 版本控制&#xff1a;Git可以记录每次代码更改的…

基于51单片机轮胎胎压监测系统—数码管显示

基于51单片机轮胎胎压监测系统 &#xff08;仿真&#xff0b;程序&#xff0b;设计报告&#xff09; 功能介绍 具体功能&#xff1a; 1.MPX4115压力传感器胎压检测&#xff1b; 2.ADC0832进行模数转换后&#xff0c;51单片机处理控制&#xff1b; 3.数码管显示胎压&#xff…

想要品牌传播有效,先清楚这三个本质问题

在互联网时代&#xff0c;企业想要提高市场竞争力就需要做好品牌传播。然而有许多企业在做品牌传播时都会踩坑&#xff0c;原因是因为忽视了这三点&#xff0c;接下来就让媒介盒子和大家分享&#xff1a; 一、 文案本质是“购买理由” 在文案技巧中经常会出现一些词&#xff…

uniapp 表单使用Uview校验 包括城市选择器

<view><!-- 注意&#xff0c;如果需要兼容微信小程序&#xff0c;最好通过setRules方法设置rules规则 --><u--form labelPosition"left" :model"model1" :rules"rules" ref"uForm" labelWidth"174"><u…

Python中csr_matrix的两种初始化方法

本文以csr_matrix为例来说明sparse矩阵的使用方法&#xff0c;其他类型的sparse矩阵可以参考https://docs.scipy.org/doc/scipy/reference/sparse.html csr_matrix是Compressed Sparse Row matrix的缩写组合&#xff0c;下面介绍其两种初始化方法 csr_matrix((data, (row_ind…

【操作系统】-寄存器-具有记忆功能的元器件

为什么要使用寄存器 现代电子计算机用二进制来表示数字&#xff0c;人类发明了触发器&#xff0c;每个触发器可以保存1比特&#xff0c;为了保存一个较大的二进制数&#xff0c;组合一起就是新的元器件&#xff0c;称为寄存器&#xff08;register&#xff09;&#xff0c;或者…

MySQL-7.mysql约束

约束用于确保数据库中的数据满足特定的商业规则。 MySQL约束包含五种&#xff1a;not null、unique、primary key、foreign key、check 7.1 primary key 主键 字段名 字段类型 primary key 用于唯一的标识表的行数据&#xff0c;当定义主键约束后&#xff0c;该列不能重复。 pr…

第十课 Excel

最上方标题栏&#xff1a; 显示共工作薄名称&#xff0c;如果显示兼容模式是没有办法使用高级功能的。分辨高版本和低版本可以通过后缀名进行分辨&#xff1b;显示xlsx就是高版本工作薄&#xff0c;如果显示xls的话就是低版本工作薄了。如果同事老板都使用的是低版本的话我们发…

VM-UNet: Vision Mamba UNet for Medical Image Segmentation

VM-UNet: Vision Mamba UNet for Medical Image Segmentation VM-UNet&#xff1a;基于视觉Mamba UNet架构的医学图像分割 论文链接&#xff1a;http://arxiv.org/abs/2402.02491 代码链接&#xff1a;https://github.com/JCruan519/VM-UNet 1、摘要 文中利用状态空间模型SS…

【攻防世界】Confusion1

php的标志是大象&#xff0c;Python的标志是蛇 。Python 的 Flask 框架( Flask 使用 Jinja2 作为模板引擎 ) 点进register.php 输入{{3*4}} 输入 {{config}} 也有回显&#xff0c;ssti 判断是否存在ssti注入&#xff1a; 1. {{8*8}} 2. {{config}} 过滤了关键字&#xff0…

人工智能前沿成科技竞争新高地

以下文章来源&#xff1a;经济参考报 近日&#xff0c;首届中国具身智能大会&#xff08;CEAI 2024&#xff09;在上海举行。作为人工智能领域的前沿热点&#xff0c;具身智能正逐步走进现实&#xff0c;成为当前全球科技竞争的新高地、未来产业的新赛道、经济发展的新引擎。 “…

vue3中项目优化(Web Worker的使用)

1.Web Worker的作用 本人的理解&#xff1a;js是单线程执行代码&#xff0c;也就是代码需要从上往下执行&#xff0c;而使用Web Worker后相当于分了一条线程出来执行代码&#xff0c;那么两条线程肯定是比一条线程执行的快。 2.新建Web Worker文件 在public文件夹下新建work…

Linux:gcc

Linux&#xff1a;gcc gcc概述语言发展史gcc的编译过程预处理编译汇编 gcc的链接过程动态库与静态库 gcc概述 GCC&#xff08;英文全拼&#xff1a;GNU Compiler Collection&#xff09;是 GNU 工具链的主要组成部分&#xff0c;是一套以 GPL 和 LGPL 许可证发布的程序语言编译…

SpringBoot整合RabbitMQ-应答模式

一、应答模式 RabbitMQ 中的消息应答模式主要包括两种&#xff1a;自动应答&#xff08;Automatic Acknowledgement&#xff09;和手动应答&#xff08;Manual Acknowledgement&#xff09;。&#xff08;一般交换机发送消息&#xff0c;RabbitMQ只有在接收到消费者的确认后才…

LeetCode-139. 单词拆分【字典树 记忆化搜索 数组 哈希表 字符串 动态规划】

LeetCode-139. 单词拆分【字典树 记忆化搜索 数组 哈希表 字符串 动态规划】 题目描述&#xff1a;解题思路一&#xff1a;Python动态规划五部曲&#xff1a;定推初遍举【先遍历背包 后遍历物品】必须是排列解题思路二&#xff1a;Python动态规划版本二解题思路三&#xff1a;回…

C++——优先级队列

前言&#xff1a;这篇文章我们继续来分享一个c的容器——优先级队列。 一.理解优先级 何为优先级一说&#xff1f;实际上就是有顺序的意思。 优先级队列&#xff0c;即有顺序的队列&#xff0c;是一个无需我们自己进行排序操作&#xff0c;在数据传入时就会由容器自己排好序的…

冒泡排序解读

在信息爆炸的时代&#xff0c;数据无处不在&#xff0c;而如何有效地管理和处理这些数据&#xff0c;成为了现代计算机科学的一个重要课题。排序算法&#xff0c;作为数据处理的基本工具之一&#xff0c;对于数据的组织、搜索和分析起着至关重要的作用。今天&#xff0c;我们就…

在家学机器人技术指南

机器人技术是一个跨学科的领域&#xff0c;涉及计算机科学、电子工程、机械工程、人工智能等多个方面。在家自学机器人技术是完全可能的&#xff0c;但需要有计划和系统的学习路径&#xff0c;以及对相关领域的基础知识有一定的了解。 以下是一些建议&#xff0c;可以帮助你在家…