【vue3】基础知识点-computed和watch

学习vue3,都会从基础知识点学起。了解setup函数,ref,recative,watch、computed、pinia等如何使用

今天说vue3组合式api,computed和watch

在vue3中,computed和watch仍然是非常有用的特性,帮助处理响应式数据的变化和副作用

computed:

注意点:
1、应当用于计算和派生数据,并确保其返回值是一个响应式应用
2、避免在computed中进行异步操作,因为computed是同步求值的
3、computed会根据依赖项的变化进行缓存,只有在依赖项发生变化时才会重新计算
4、computed不应该有副作用,主要作用就是做计算,如果做了异步请求,修改DOM等那就是副作用
5、避免直接修改computed的值,默认情况下computed的值是只读的

优点:
1、简化代码,避免在模板区编写复杂的计算逻辑
2、响应式,会根据依赖项的变化自动更新最新的计算结果,保持视图与数据的同步

缺点:
1、依赖项过多,如果computed中的依赖项过多或复杂,可能会导致计算开销较大,影响性能

使用:
1、导入computed函数
2、执行函数,在回调参数中return基于响应式数据做计算的值,用变量接收

<script setup>
import {ref,computed} from 'vue'const list = ref([1,2,3,4,5,6,7,8])const computedList = computed(()=>{return list.value.filter(item=>item>2)//验证computed计算的数组变化时是否会重新计算setTimeout(()=>{list.value.push(9,10)},3000)
})
</script><template><div >原始响应数据-{{list}}</div><div >计算属性数组-{{computedList }}</div>
</template>

在这里插入图片描述
3秒之后重新计算,computed会根据依赖项的变化自动更新最新的计算结果
在这里插入图片描述

watch:

注意点:
1、watch主要用于监听特定数据的变化,并执行副作用操作(例如:发起异步请求,更改DOM)
2、可以使用watch的返回函数来取消对数据的监听
优点:
1、灵活度高,watch可以监听多个数据的变化,可以执行异步操作,可以做更多的自定义处理
2、适应场景复杂:wacth适用于处理数据变化产生的副作用,例如:获取数据后执行其他操作
缺点:
1、代码较为复杂,相对于computed,watch的代码可能会更复杂,难以阅读和维护
使用:
1、导入watch函数
2、执行watch函数传入要监听的响应式数据(ref对象)和回调函数
例如:
//调用watch,监听单个数据源的变化

<script setup>
//导入watch
import {ref,watch} form 'vue'
const count = ref(0)
const setCount = ()=>{
count.value++
}//ref对象不需要加.value,内部已经处理
watch(count,(newVal,oldVal)=>{
console.log('老值${oldVal},新值${newVal}')
})</script>

//调用watch,监听多个数据源的变化,不管哪个数据发生变化都需要执行回调

<script setup>
//导入watch
import {ref,watch} form 'vue'
const count = ref(0)
const name = ref('zs')
//用数组的方式将所有要监听的数据都放进来
//回调函数中第一个数组为新值,第二个数组为旧值
watch([count,name],([newCount,newName],[oldCount,oldName])=>{
console.log('老值[oldCount,oldName],新值[newCount,newName]')
})</script>

watch精确监听某个对象的特定属性
deep开启后会进行递归遍历,存在性能损耗。在不开启deep的前提下,监听对象的特定属性,只有特定属性发生变化才执行回调,将监听变成两个回调函数的写法
例如:

import {ref,watch} from 'vue'
cosnt info = ref({
name:'zs',
age:'18'
})watch(
()=>info.value.age,
(newVal,oldVal)=>{'在此执行属性age相关的代码操作'}
)

ps:
ref()函数,如果传入的是简单类型数据

import { ref } from 'vue';const count = ref(0);console.log(count.value); // 输出 0count.value = 1; // 修改包装后的值
console.log(count.value); // 输出 1

ref()函数,如果传入的是复杂类型数据

import { ref } from 'vue';const person = ref({name: 'Alice',age: 25
});
//当值为对象类型,会用recative()自动转换它的value
//响应式替换
person.value = {name: 'Alice',age: 25
}
console.log(person.value.name); // 输出 'Alice'// 修改复杂数据类型的某个属性
person.value.name = 'Bob';console.log(person.value.name); // 输出 'Bob'

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

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

相关文章

JavaWeb学习|JSP相关内容

1.什么是JSP Java Server Pages: Java服务器端页面&#xff0c;也和Servlet一样&#xff0c;用于动态Web技术! 最大的特点: 。写JSP就像在写HTML 。区别: 。HTML只给用户提供静态的数据 。JSP页面中可以嵌入JAVA代码&#xff0c;为用户提供动态数据 JSP最终也会被转换成为一…

Android数据存储选项:SQLite、Room等

Android数据存储选项&#xff1a;SQLite、Room等 1. 引言 在移动应用的开发过程中&#xff0c;数据存储是至关重要的一环。无论是用户的个人信息、设置配置还是应用产生的临时数据&#xff0c;都需要在设备上进行存储以便随时访问。随着移动应用的日益发展&#xff0c;数据存…

springboot-mybatis的增删改查

目录 一、准备工作 二、常用配置 三、尝试 四、增删改查 1、增加 2、删除 3、修改 4、查询 五、XML的映射方法 一、准备工作 实施前的准备工作&#xff1a; 准备数据库表 创建一个新的springboot工程&#xff0c;选择引入对应的起步依赖&#xff08;mybatis、mysql驱动…

Flowable-网关-事件网关

目录 定义图形标记XML内容使用示例视频教程 定义 通常网关根据连线条件来决定后继路径&#xff0c;但事件网关不同&#xff0c;它提供了根据事件做选择的方式。 事件网关的每个外出顺序流都需要连接至一个捕获中间事件。当流程执行到达事件网关时&#xff0c;网关类 似处于等待…

【阻止IE强制跳转到Edge浏览器】

由于微软开始限制用户使用Internet Explorer浏览网站&#xff0c;IE浏览器打开一些网页时会自动跳转到新版Edge浏览器&#xff0c;那应该怎么禁止跳转呢&#xff1f; 1、点击电脑左下角的“搜索框”或者按一下windows键。 2、输入“internet”&#xff0c;点击【Internet选项…

Python Opencv实践 - 在图像上绘制图形

import cv2 as cv import numpy as np import matplotlib.pyplot as pltimg cv.imread("../SampleImages/pomeranian.png") print(img.shape)plt.imshow(img[:,:,::-1])#画直线 #cv.line(img,start,end,color,thickness) #参考资料&#xff1a;https://blog.csdn.ne…

百度智能云“千帆大模型平台”最新升级:接入Llama 2等33个模型!

今年3月&#xff0c;百度智能云推出“千帆大模型平台”。作为全球首个一站式的企业级大模型平台&#xff0c;千帆不但提供包括文心一言在内的大模型服务及第三方大模型服务&#xff0c;还提供大模型开发和应用的整套工具链&#xff0c;能够帮助企业解决大模型开发和应用过程中的…

04-2_Qt 5.9 C++开发指南_SpinBox使用

文章目录 1. SpinBox简介2. SpinBox使用2.1 可视化UI设计2.2 widget.h2.3 widget.cpp 1. SpinBox简介 QSpinBox 用于整数的显示和输入&#xff0c;一般显示十进制数&#xff0c;也可以显示二进制、十六进制的数&#xff0c;而且可以在显示框中增加前缀或后缀。 QDoubleSpinBox…

stl_list类(使用+实现)(C++)

list 一、list-简单介绍二、list的常用接口1.常见构造2.iterator的使用3.Capacity和Element access4.Modifiers5.list的迭代器失效 三、list实现四、vector 和 list 对比五、迭代器1.迭代器的实现2.迭代器的分类&#xff08;按照功能分类&#xff09;3.反向迭代器(1)、包装逻辑…

嵌入式开发学习(STC51-9-led点阵)

内容 点亮一个点&#xff1b; 显示数字&#xff1b; 显示图像&#xff1b; LED点阵简介 LED 点阵是由发光二极管排列组成的显示器件 通常应用较多的是8 * 8点阵&#xff0c;然后使用多个8 * 8点阵可组成不同分辨率的LED点阵显示屏&#xff0c;比如16 * 16点阵可以使用4个8 *…

【Linux命令详解 | less命令】Linux系统中用于分页显示文件内容的命令

文章标题 简介一&#xff0c;参数列表二&#xff0c;使用介绍1. 分页显示文件内容2. 搜索关键词3. 显示行号4. 显示特定内容5. 只显示匹配行6. 忽略大小写搜索7. 输出到文件8. 动态查看文件增长9. 开启对二进制文件的支持10. 显示控制字符11. 忽略键盘输入12. 显示百分比进度条…

001-Spring boot 启动内置Web容器分析

目录 代码入口上下文容器 加载web容器 代码入口 上下文容器 SpringApplication.run(App.class); //追踪下去发现 context createApplicationContext();createApplicationContext()&#xff1a; return this.applicationContextFactory.create(this.webApplicationType);这里…

python 封装sql 增删改查连接MySQL

select * from Teacher limit 10 连接字符串配置MysqlConfig.py class MysqlConfig:HOST 192.168.56.210PORT 3306USER rootPASSWORD 1qaz0987654321DBStudentDBCHARSET utf8封装增删改查MysqlConnection.py Author: tkhywang 2810248865qq.com Date: 2023-06-19 15:44:48 Las…

使用MIT Kerberos Ticket Manager在windows下浏览器访问hadoop页面

Author : Spinach | GHB Link : http://blog.csdn.net/bocai8058文章目录 前言准备配置说明安装Firefox浏览器安装MIT Kerberos Ticket Manager客户端配置krb5.ini文件配置MIT Kerberos Ticket Manager客户端配置Firefox浏览器代理参数 访问WebUI 前言 kerberos是一种计算机…

linux 查看磁盘大小 内存 目录下各目录大小

查看当前服务器挂在的磁盘大小及已使用、可使用、使用占比、磁盘对应的目录等 df -TH 查看当前目录下 各子目录或文件的大小&#xff1a;右边是目录或文件名&#xff0c;左边是占用的大小 du -sh * 使用 rm命令删除目录或文件&#xff1a;删了数据找不回来&#xff0c;&#x…

【二叉树】105. 从前序与中序遍历序列构造二叉树

链接: 105. 从前序与中序遍历序列构造二叉树 先序 能够确定谁是根 中序 知道根之后&#xff0c;能够确定左子树和右子树的范围 例子 根据先序的性质&#xff08;根左右&#xff09;&#xff0c;能够确定根&#xff0c;我们就能够从总序中找出根节点&#xff08;rooti所在…

MyBatis简介及环境配置

文章目录 一、什么是MyBatis二、MyBatis开发环境配置1.创建数据库表2.添加MyBatis框架支持3.配置连接字符串和MyBatis4.添加业务代码流程 一、什么是MyBatis MyBatis是一种持久层框架&#xff0c;也是一种ORM框架&#xff08;Object Relational Mapping即对象关系映射&#xf…

C语言学习笔记 使用vscode外部console出现闪退-12

前言 在使用vscode的外部console时&#xff0c;会出现闪退现象&#xff0c;这是因为程序运行结束后&#xff0c;系统自动退出了终端&#xff08;终端机制决定的&#xff09;。我们可以在C程序结束后&#xff0c;使用system函数来暂停DOS终端系统&#xff0c;这样就可以完整地看…

RS485实验

RS485实验 介绍 RS485采用差分信号进行传输&#xff0c;半双工通信。RS485是一个总线&#xff0c;在同一总线上最多可以挂接32个节点。通信流程简单理解为默认为接收状态&#xff0c;发送数据时切换为发送状态&#xff0c;数据发送完毕后切换为接收状态。发送和接收分别由一个…

算法与数据结构-哈希表

文章目录 什么是散列表散列函数的设计原则散列冲突的解决办法1. 开放寻址法2. 链表法 什么是散列表 散列表用的是数组支持按照下标随机访问数据的特性&#xff0c;所以散列表其实就是数组的一种扩展&#xff0c;由数组演化而来。可以说&#xff0c;如果没有数组&#xff0c;就…