vue3学习三

五 计算属性

定义

选项式

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.mzph.cn/web/66294.shtml

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

相关文章

学习threejs,使用OrbitControls相机控制器

👨‍⚕️ 主页: gis分享者 👨‍⚕️ 感谢各位大佬 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍⚕️ 收录于专栏:threejs gis工程师 文章目录 一、🍀前言1.1 ☘️THREE.OrbitControls 相机控…

【2024年华为OD机试】 (B卷,100分)- 流水线(Java JS PythonC/C++)

一、问题描述 题目描述 一个工厂有 m 条流水线,来并行完成 n 个独立的作业,该工厂设置了一个调度系统,在安排作业时,总是优先执行处理时间最短的作业。 现给定流水线个数 m,需要完成的作业数 n,每个作业…

opencv图像基础学习

2.3图像的加密解密 源码如下: import cv2 import numpy as np import matplotlib.pyplot as plt def passImg():imgcv2.imread(./image/cat.jpg,0)h,wimg.shape#生成一个密码,加密key_imgnp.random.randint(0,256,size(h,w),dtypenp.uint8)img_addmcv2…

【机器学习】零售行业的智慧升级:机器学习驱动的精准营销与库存管理

我的个人主页 我的领域:人工智能篇,希望能帮助到大家!!!👍点赞 收藏❤ 在当今数字化浪潮汹涌澎湃的时代,零售行业正站在转型升级的十字路口。市场竞争的白热化使得企业必须另辟蹊径&#xff0…

Navicat Premium 原生支持阿里云 PolarDB 数据库

近日,我司旗下的 Navicat Premium 软件通过了阿里云 PolarDB 数据库产品生态集成认证,这标志着 Navicat 通过原生技术全面实现了对秒级弹性、高性价比、稳定可靠的PolarDB 数据库三大引擎(PolarDB MySQL版、PolarDB PostgreSQL版和 PolarDB f…

【SpringBoot应用篇】SpringBoot+MDC+自定义Filter操作traceId实现日志链路追踪

【SpringBoot应用篇】SpringBootMDC自定义Filter操作traceId实现日志链路追踪 解决的问题解决方案MDC具体逻辑ymllogback-spring.xmlTraceIdUtil操作工具类TraceIdFilter自定义过滤器GlobalExceptionHandler全局异常处理类TraceIdAspect切面UserController测试验证 多线程处理M…

python如何解析word文件格式(.docx)

python如何解析word文件格式(.docx) .docx文件遵从开源的“Office Open XML标准”,这意味着我们能用python的文本操作对它进行操作(实际上PPT和Excel也是)。而且这并不是重复造轮子,因为市面上操作.docx的…

python爬虫报错日记

python爬虫报错日记 类未定义 原因:代码检查没有问题**,位置错了**,测试代码包含在类里…… UnicodedecodeError错误 原因:字符没有自动转换成utf-8格式 KeyError:“href” 原因:前面运行正常&#x…

第34天:Web开发-PHP应用鉴别修复AI算法流量检测PHP.INI通用过滤内置函数

#知识点 1、安全开发-原生PHP-PHP.INI安全 2、安全开发-原生PHP-全局文件&单函数 3、安全开发-原生PHP-流量检测&AI算法 一、通用-PHP.INI设置 参考: https://www.yisu.com/ask/28100386.html https://blog.csdn.net/u014265398/article/details/109700309 …

基于PHP的校园新闻发布管理

摘要 近年来,随着互联网技术的迅速发展,人们获取新闻的渠道也变得越来越多样化,已经不再拘束于传统的报纸、期刊、杂志等纸质化的方式,而是通过网络满足了人们获得第一手新闻的愿望,这样更加有助于实现新闻的规范化管…

从玩具到工业控制--51单片机的跨界传奇【3】

在科技的浩瀚宇宙中,51 单片机就像一颗独特的星辰,散发着神秘而迷人的光芒。对于无数电子爱好者而言,点亮 51 单片机上的第一颗 LED 灯,不仅仅是一次简单的操作,更像是开启了一扇通往新世界的大门。这小小的 LED 灯&am…

boss直聘 __zp_stoken__ 逆向分析

声明: 本文章中所有内容仅供学习交流使用,不用于其他任何目的,抓包内容、敏感网址、数据接口等均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关! 有相关问题请第一时间头像私信联系我删…

【日志篇】(7.6) ❀ 01. 在macOS下刷新FortiAnalyzer固件 ❀ FortiAnalyzer 日志分析

【简介】FortiAnalyzer 是 Fortinet Security Fabric 安全架构的基础,提供集中日志记录和分析,以及端到端可见性。因此,分析师可以更有效地管理安全状态,将安全流程自动化,并快速响应威胁。具有分析和自动化功能的集成…

Linux 内核自旋锁spinlock(一)

文章目录 前言一、自旋锁1.1 简介1.2 API1.2.1 spin_lock/spin_unlock1.2.2 spin_lock_irq/spin_unlock_irq1.2.3 spin_lock_irqsave/spin_unlock_irqstore1.2.4 spin_lock_bh/spin_unlock_bh1.2.5 补充 二、自选锁原理三、自旋锁在内核的使用3.1 struct file3.2 struct dentry…

【太古新篇,智驭未来】 SFA系统成功上线

经过双方团队的不懈努力与紧密合作,eBest成功帮助香港太古可乐完成了SFA系统的全面上线! 太古可乐,作为饮料行业的佼佼者,一直以来以其卓越的品质和深入人心的品牌形象深受消费者喜爱。然而,在快速变化的市场环境中&am…

Web安全|渗透测试|网络安全

基础入门(P1-P5) p1概念名词 1.1域名 什么是域名? 域名:是由一串用点分隔的名字组成的Internet上某一台计算机或计算机组的名称,用于在数据传输时对计算机的定位标识(有时也指地理位置)。 什么是二级域名多级域名…

陈萍的设计创新:Kevlin Nexus荣获伦敦设计奖,展示品牌设计的国际化与持续创新

近日,陈萍凭借其创新设计作品 Kevlin Nexus,成功斩获 2024 伦敦设计奖。该奖项旨在表彰全球范围内的优秀设计作品,表彰设计界最完美、最前沿的成就。伦敦设计奖是全球最具权威性和影响力的设计奖项之一,其评选标准以高水准的专业性和严格性著称。作为全球设计界的顶级荣誉,伦敦…

qml DirectionalBlur详解

1、概述 DirectionalBlur是QML(Qt Modeling Language)中用于创建方向模糊效果的一种图形效果类型。它通过对源图像的像素进行模糊处理,产生一种源项目朝着模糊方向移动的感知印象。这种模糊效果被应用到每个像素的两侧,因此设置方…

怎么投稿各大媒体网站?如何快速辨别一家媒体是否适合自己?

在做软文营销时,除去在官号和子账号上投稿外,怎么投稿各大媒体网站是困扰中小企业主的一大难题。没有多余账号、运营成本太高,让不少想做全平台推广的朋友止步于此。为了解决这些问题,今天就让小编来分享一下,怎么在各…

MES设备日志采集工具

永久免费: <下载> <使用说明> 用途 定时全量或增量采集工控机,电脑文件或日志. 优势 开箱即用: 解压直接运行.不需额外下载.管理设备: 后台统一管理客户端.无人值守: 客户端自启动,自更新.稳定安全: 架构简单,兼容性好,通过授权控制访问. 架构 技术架构: Asp…