vue3学习三

ops/2025/1/19 3:18:43/

五 计算属性

定义

选项式

export default {data(){return {num:1}},computed:{num1(){this.num+=1}}
}

组合式

import {ref,computed} from 'vue'let num=ref(0);
//仅读
let num1 = computed(()=>{return num.value+=1
})

计算时依赖的变量数据发生变化,则计算属性值发生变化。

计算时依赖的变量数据没有发生变化,则使用缓存数据,不再重新计算。

方法计算的值没有缓存,即选项式中methods、组合式function中没有使用缓存,每次都会重新计算。

若根据大量数据计算出数据,推荐使用计算属性。

修改

和改变逻辑依赖变量导致计算结果不同,通过改计算属性结果修改其依赖的变量。

计算属性定义的对象为响应式对象,为ref形式的对象,但是其value属性为只读属性。

get函数读操作触发,set函数写操作出发。

//可读 可写
let num1 = computed({//读属性get(){return num.value+=1},//写属性set(value){num.value = value}})

六 监视watch

官网:https://cn.vuejs.org/guide/essentials/watchers.html

watch监视数据的变化,与vue2中作用一致。

监视数据类型:

  • ref定义的数据
  • reactive定义的数据
  • 函数返回值(getter函数)
  • 包含上述内容的数组

监视ref定义基本类型数据

watch第一个参数为响应式对象,而不是其值。

watch监视ref定义的数据,使用stopWatch()取消监视。

import {ref,watch} from 'vue'
let num = ref(0)
function changenum(){num.value+=1
}
let num_watch = watch(num,(newvalue,oldvalue)=>{console.log(newvalue,oldvalue)if(newvalue >= 2){stopWatch()//取消监视}
})

监视ref定义的对象类型数据

监视整个对象时,仅修改vlaue中属性,监视不会被触发,但是修改整个value属性监视会被触发。

开启深度监视,可以监视到value中属性。

watch中第三个对象参数,做为配置项:

  • deep:true 深度监视,在 Vue 3.5+ 中,deep 选项还可以是一个数字,表示最大遍历深度——即 Vue 应该遍历对象嵌套属性的级数
  • immediate:true 立即监视,先执行监视
  • once: true 一次性监听器,仅支持 3.4 及以上版本
import {ref,watch} from 'vue'
let item = ref({title:"11",sort:1
})
function changetitle(){item.value.title+="~"
}
function changesort(value){item.value.sort+="~"
}
function changeitem(){item.value = {title:"12",sort:2}
}
watch(item,(newvalue,oldvalue)=>{console.log('watch1',newvalue,oldvalue)
})watch(item,(newvalue,oldvalue)=>{console.log('watch2',newvalue,oldvalue)},{deep:true//开启深度监视}
)

newvalue和oldvalue指的是对象的引用地址,所以引用地址不变,即不定义为新对象数据,其都指向一个地址,所以俩值相同。

监视recative定义的对象类型数据

监视整个对象时,默认开启深度监视,修改对象中的属性,也会被监视。

这种深度监视不可关闭,即deep:false无效果。

import {reactive,watch} from 'vue'
let item=reactive({title:"title",sort:1
})
function changetitle(){item.title+="~"
}
function changeitem(){let new_item = {title:"title1",sort:2}Object.assign(item,new_item)
}
watch(item,(newvalue,oldvalue)=>{console.log(newvalue,oldvalue)
},{deep:false})

不管修改整个对象或者单个属性,newvalue和oldvalue都相同,道理同上。

监视getter数据

监视的数据不是对象类型,使用getter。

getter即匿名方法中返回要监听的值,可用于监听对象中的某个属性。

import {ref,reactive,watch} from 'vue'
let item=reactive({title:"title",sort:1,books:{b1:"123",b2:"qwe"}
})

function changetitle(){item.title+="~"
}watch(()=>{return item.title},(newv,oldv)=>{console.log(newv,oldv)
})

仅修改title时会触发监听。

newv为改后的值,oldv为改后的值。

因为监视的为单个数据,修改内容为原内容副本,数据前后地址会变,所以修改前后的值不同。

function changebooks(){item.books = {b1:"test1",b2:"test2"}
}function changebook1(){item.books.b1+="~"
}watch(item.books,(newv,oldv)=>{console.log("watch2",newv,oldv)
})watch(()=>item.books,(newv,oldv)=>{console.log("watch3",newv,oldv)
})watch(()=>item.books,(newv,oldv)=>{console.log("watch4",newv,oldv)
},{deep:true})

若监听reactive对象中的嵌套的对象,建议也用函数式,否则修改对象地址之后监视不到。

像代码中changebook1会输出watch2、watch4,changebooks中整个对象修改会输出watch3。

所以监视reactive对象或ref对象中嵌套的对象,最好使用getter和深度监视。

监视多个数据

监视多个属性,传递数组。

非对对象属性使用getter,对象属性直接使用。

import {ref,reactive,watch} from 'vue'
let item=reactive({title:"title",sort:1,books:{b1:"123",b2:"qwe"}
})
function changetitle(){item.title+="~"
}
function changesort(){item.sort+=2
}
function changebook1(){item.books.b1+="~"
}
watch([()=>item.title,()=>item.sort],(newv,newo)=>{console.log("watch5")console.log(newv,newo)
})

 如代码所示,执行changetitle、changesort、changetest1监视都会被执行,但执行changebook1监视不会被执行。

返回的newv和newo都是数组,数组值和参数的位置相对应。


http://www.ppmy.cn/ops/151255.html

相关文章

【WEB】网络传输中的信息安全 - 加密、签名、数字证书与HTTPS

文章目录 1. 概述2. 网络传输安全2.1.什么是中间人攻击2.2. 加密和签名2.2.1.加密算法2.2.2.摘要2.2.3.签名 2.3.数字证书2.3.1.证书的使用2.3.2.根证书2.3.3.证书链 2.4.HTTPS 1. 概述 本篇主要是讲解讲一些安全相关的基本知识(如加密、签名、证书等)&…

芯片详细讲解,从而区分CPU、MPU、DSP、GPU、FPGA、MCU、SOC、ECU

目录 芯片的概念结构 芯片的派系划分 通用芯片(CPU,MPU,GPU,DSP) 定制芯片(FPGA,ASIC) 芯片之上的集成(MCU,SOC,ECU) 软硬件的匹…

QT入门的一些吐槽

QT入门的一些吐槽 看了网上的一些介绍QT的课程,看了一些讲述qt的书籍,然而再想自己做一个项目的时候,却发现我好像什么都不会,QT对我来说就是一个黑盒子。 我只会: 使用QT Creator创建一个项目,再UI文件中…

Spring Boot + Redis + Sa-Token

参考文献 Sa-Token实现分布式登录鉴权(Redis集成 前后端分离)-腾讯云开发者社区-腾讯云 介绍 StpInterface 是 Sa-Token 框架中的一个接口,属于 Sa-Token 身份认证与授权框架的一部分。该接口提供了一些方法来实现自定义的身份认证和授权管…

浅谈云计算18 | OpenStack架构概述

OpenStack架构概述 一、OpenStack核心组件探究1.1 计算组件Nova1.2 镜像组件Glance1.3 身份认证组件Keystone1.4 网络组件Neutron1.5 块存储组件Cinder1.6 对象存储组件Swift1.7 控制面板组件Horizon1.8 计量组件Ceilometer1.9 编排组件Heat 二、OpenStack组件逻辑关系揭秘2.1 …

微信小程序码生成

微信小程序生成二维码、程序码、海报_java生成二维码分享海报-CSDN博客

DNS介绍(5):DNS 劫持及解决方案

DNS劫持分析 DNS劫持,亦称为域名重定向或DNS篡改,是一种网络攻击技术。其核心在于攻击者通过篡改DNS系统的域名解析结果,将用户本意访问的域名指向攻击者所掌控的IP地址。这种攻击不仅可能使用户无法顺利访问所需网站,还可能让用…

MongoDB单机版安装

MongoDB单机版安装 在CentOS Linux release 7.9.2009 (Core)下安装MongoDB的步骤如下: 1 创建用户和组(可选,根据需要) 如果您希望以非root用户运行MongoDB服务,可以创建一个专用的用户和组。 groupadd mongodb us…