vue3计算属性与监视及watchEffect函数

news2025/8/4 16:08:46

computed计算属性

首先看一下页面的结构

 

在v3中可以用v2的方式来写计算属性,但是不建议这么写

 而想要在v3中使用计算属性,需要先引入它

 它不想之前在v2中的函数了,而是要写在computed()里面

当然这个计算属性是简写(没有考虑计算属性被修改的情况,如果我们修改了它的值就会报错

 因为它只是只读的,你不能去修改它

 因此我们如果要修改它的值,我们可以采用v3计算属性的完整写法,就是在computed里面写成一个对象的形式,computed({})并且给他添加set,get 

总结

与Vue2.x中computed配置功能一致

写法

import {computed} from 'vue'

setup(){
    ...
	//计算属性——简写
    let fullName = computed(()=>{
        return person.firstName + '-' + person.lastName
    })
    //计算属性——完整
    let fullName = computed({
        get(){
            return person.firstName + '-' + person.lastName
        },
        set(value){
            const nameArr = value.split('-')
            person.firstName = nameArr[0]
            person.lastName = nameArr[1]
        }
    })
}

watch监视ref定义的数据

首先看v2中的监听器的写法

当然这只是一个简写的形式,看一下完整写法

看一下v3中的watch的写法,在v3中你也要先去引用一下它

它这个watch是写在setup里面的,但是v3中的监视是有几个坑的

首先,比如这是情况一:监视ref所定义的一个响应式数据

情况二:监视ref所定义的多个响应式数据(像在v2中只能配置一个配置项,而在v3中可以配置多个配置项)

当然这么太过于麻烦了,我们这有一个简便的写法

 就是把数据写在一个数组里面 ,但是现有又有一个问题了,像我们之前写的deep等配置写在哪里呢?

就是它的第三个形参,用来存放这些配置的 

watch监视reactive定义的数据

上面讲了普通的数据类型,这部分是结束用reactive定义的复杂数据类型

也是用之前的watch包裹,但又一个坑,就是监视的俩个新旧值都是一样的 

情况三:监视reactive所定义的全部响应式数据 注意:此处无法正确的获取oldValue。

如果真的需要这个oldValue的值,但我们只能拿出去放在ref中使用

在reactive对象中,我们嵌套对象,也能监视到。 

注意:强制开启了深度监视(deep配置无效)

情况四:监视reactive所定义的某一个响应式数据

它需要写成一个函数式

watch(()=>person.name,(newValue,oldValue)=>{

                console.log(newValue,oldValue);

            })

 情况五:监视reactive所定义的某些响应式数据,就是写成数组的形式

 

 特殊情况 监视的是reactive元素定义的对象中的某个属性,所以deep配置有效

总结

与Vue2.x中watch配置功能一致

两个小“坑”:

  • 监视reactive定义的响应式数据时:oldValue无法正确获取、强制开启了深度监视(deep配置失效)。
  • 监视reactive定义的响应式数据中某个属性时:deep配置有效。
//情况一:监视ref定义的响应式数据
watch(sum,(newValue,oldValue)=>{
	console.log('sum变化了',newValue,oldValue)
},{immediate:true})

//情况二:监视多个ref定义的响应式数据
watch([sum,msg],(newValue,oldValue)=>{
	console.log('sum或msg变化了',newValue,oldValue)
}) 

/* 情况三:监视reactive定义的响应式数据
			若watch监视的是reactive定义的响应式数据,则无法正确获得oldValue!!
			若watch监视的是reactive定义的响应式数据,则强制开启了深度监视 
*/
watch(person,(newValue,oldValue)=>{
	console.log('person变化了',newValue,oldValue)
},{immediate:true,deep:false}) //此处的deep配置不再奏效

//情况四:监视reactive定义的响应式数据中的某个属性
watch(()=>person.job,(newValue,oldValue)=>{
	console.log('person的job变化了',newValue,oldValue)
},{immediate:true,deep:true}) 

//情况五:监视reactive定义的响应式数据中的某些属性
watch([()=>person.job,()=>person.name],(newValue,oldValue)=>{
	console.log('person的job变化了',newValue,oldValue)
},{immediate:true,deep:true})

//特殊情况
watch(()=>person.job,(newValue,oldValue)=>{
    console.log('person的job变化了',newValue,oldValue)
},{deep:true}) //此处由于监视的是reactive素定义的对象中的某个属性,所以deep配置有效

watch时value的问题

现在有一个问题,就是如果我们监视ref数据,需不需要加.value

 我们发现如果不加.value没有问题,添加了反而出现了问题 

因为加.value就是相当于把它真正的值取出来了,而我们检测的一个结构(Reflmpl{……})

 而如果我们修改的是一个ref中的对象,那么需要点value,因为如果不加.value,那么你访问是一个地址值,你修改部分属性不会影响到它,它因此就不会发生变化。加了.value,它就会强制打开深度监听。

除了这个.value的办法外还有

watch(person,(newValue,oldValue)=>{

                console.log(newValue,oldValue);

            },{deep:true})

我们自己手动给它配置

watchEffect函数

watchEffect()这也是函数,它不需要告诉你要监视什么,而是直接使用箭头函数

感觉了它一开始就开启了immediate:true 

那么它监视啥?

这个watchEffect它很智能,你用到了谁,他就监视谁

看这个,你用到了sum,它就智能帮你监视这个值 

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

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

相关文章

Python opencv 先腐蚀后膨胀 消除图像噪声

cv2.getStructuringElement()介绍 在进行图像形态学操作时,首先需要构造一个特定的核,该核可以自定义生成,也可以通过cv2.getStructuringElement()函数构造。 cv2.getStructuringElement(shape, ksize)参数: shape ---- 代表形状…

常见在线AI绘画平台

系列文章目录 Midjourney AI绘画工具使用保姆级教程 本地部署Stable Diffusion教程,亲测可以安装成功 Stable Diffusion界面参数及模型使用 文章目录系列文章目录前言一、Midjourney二、DreamStudio三、Lexica四、STOCKIMG.AI五、Dream by WOMBO六、PicSo七、百…

ArcGIS、ENVI、InVEST、FRAGSTATS等多技术融合提升环境、生态、水文、土地、土壤、农业、大气等领域的数据分析

查看原文>>>ArcGIS、ENVI、InVEST、FRAGSTATS等多技术融合提升环境、生态、水文、土地、土壤、农业、大气等领域的数据分析 目录 专题一、空间数据获取与制图 专题二、ArcGIS专题地图制作 专题三、空间数据采集与处理 专题四、遥感数据处理与应用 专题五、DEM数据…

macOS Big Sur 11.7.6 (20G1231) Boot ISO 原版可引导镜像

本站下载的 macOS 软件包,既可以拖拽到 Applications(应用程序)下直接安装,也可以制作启动 U 盘安装,或者在虚拟机中启动安装。另外也支持在 Windows 和 Linux 中创建可引导介质。 2023 年 4 月 10 日(北京…

压力测试工具JMeter的下载安装与基础使用(一)

JMeter的下载安装与基础使用1.环境准备2.下载与配置2.1下载并解压2.2 配置系统变量 JMETER_HOME2.3配置系统变量 CLASSPATH3.测试JMeter是否配置成功4. 语言修永久修改为中文(可选)1.环境准备 JMeter是用java开发的,示例Apache JMeter5.5版本…

css动画及背景设置

css属性 clip-path 属性使用裁剪方式创建元素的可显示区域。区域内的部分显示,区域外的隐藏。可以指定一些特定形状。 可以创建多边形内容显示区域polygon clip-path: polygon(0 0, 100% 0, 100% 75vh 0 100%); 顺序 1初始x y 为0 0 1向2位置 x轴移动100% y移…

SpringBoot集成elasticsearch使用(增删改查)

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 SpringBoot集成elasticsearch使用(增删改查)一、es是什么?二、使用步骤1.搭配环境springboot集成es1、新建springboot项目,引入…

19_I.MX6ULL_SPI实验

目录 SPI简介 I.MX6U ECSPI简介 相关寄存器 ICM-20608简介 实验源码 SPI简介 同I2C一样,SPI是很常用的通信接口,也可以通过SPI来连接众多的传感器。相比I2C接口, SPI接口的通信速度很快, I2C最多400KHz,但是SPI可以到达几十MHz。I.MX6U也有4个SPI接口,可以通过这4个SPI接…

电感为什么会有饱和电流

电感有一个重要的参数那就是饱和电流,饱和电流的定义是当电感感值下降30%时流过电感的电流。 那么电感为什么会有饱和电流呢? 这个是电感磁芯的磁化曲线,横坐标是磁场强度H,纵坐标是磁感应强度B 在磁场强度较小的时候,…

大数据需要学哪些内容

大数据技术是当今互联网时代的热点之一,目前已经成为了各行各业中的最佳选择。随着物联网、人工智能、云计算等技术的发展,数据的规模不断增大,数据分析、数据挖掘、人工智能等应用也随之蓬勃发展,对大数据开发的需求越来越多。因…

智能网卡-提升网络性能的新选择

一、智能网口介绍 智能网卡(Smart NIC)是一种专用于网络数据处理的高性能网卡,采用了定制芯片、高速网络接口和强大的软件支持,可以为数据中心和企业网络提供更快、更安全、更可靠的网络连接和数据传输服务。 智能网卡的出现受到…

教你使用Apache搭建Http

Apache2默认采用的是80端口号,因此直接通过公网ip或域名就能访问。现实中,很多服务器本身就部署了许多其它服务,80端口号往往被占用,因此就需要将Apache2改成其它访问端口。 修改端口,首先需要修改/etc/apache2/ports…

数组排序详解

数组排序详解1、排序算法小结2、排序算法原理及实现2.1 归并排序2.2 快速排序2.3 冒泡排序2.4 插入排序2.5 选择排序2.6 希尔排序:1、排序算法小结 排序算法可以分为两大类: (1)非线性时间排序算法:通过比较来决定元素…

用Python实现批量翻译文档文件

文件名批量翻译需要用到编程语言和相应的翻译 API,下面以 Python 和 Google 翻译 API 为例,介绍具体的实现步骤: 安装必要的 Python 库 使用 Python 代码进行文件名翻译需要先安装两个库:googletrans 和 os。 pip install googl…

全网最全的Cookie, Session, Token鉴权详解,一定让你大饱眼福

目录 前言 一、Cookie鉴权 二、Session鉴权 ​编辑 三、Token鉴权 四、总结 前言 在Web开发中,鉴权是保护用户数据和系统安全的重要手段之一。常见的鉴权方式包括Cookie、Session和Token三种,下面我将详细介绍这三种鉴权方式,并且探讨它…

FMC子卡设计资料:ADRV9002双窄带宽带射频收发器 AD9361双收双发射频 DA子卡 ADRV9009双收双发射频FMC子卡

FMC550-基于ADRV9002双窄带宽带射频收发器FMC子卡 一、产品概述 ADRV9002 是一款高性能、高线性度、高动态范围收发器,旨在针对性能与功耗系统进行优化。该设备是可配置的,非常适合要求苛刻、低功耗、便携式和电池供电的设备。ADRV9002 的工作频率为…

基于典型相关分析的故障检测和过程监控算法研究(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。⛳座右铭&#…

分布式消息中间件概念

对于分布式消息中间件,首先要了解两个基础的概念,即什么是分布式系统,什么又是中间件。 分布式系统 “A distributed system is one in which components located at networked computers communicate and coordinate their actions only by …

Java 中常用的版本对应关系,springboot springcloud,cloud-alibaba

1.网址链接&官方文档链接 SpringCloud与SpringBoot的版本对应关系:https://start.spring.io/actuator/info SpringBoot版本列表:https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-parent SpringBoot最新GA版官方文档&#…

【计算机网络——制作双绞线】

文章目录实验目的:实验内容及过程记录(一)剪线(二)剥皮(三)排序(四)剪齐(五)插入(六)压制:(七)检测…