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都是数组,数组值和参数的位置相对应。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

spark任务优化参数整理

以下参数中有sql字眼的一般只有spark-sql模块生效,如果你看过spark的源码,你会发现sql模块是在core模块上硬生生干了一层,所以反过来spark-sql可以复用core模块的配置,例外的时候会另行说明,此外由于总结这些参数是在不…

华为数据中心CE系列交换机级联M-LAG配置示例

M-LAG组网简介 M-LAG(Multi-chassis Link Aggregation)技术是一种跨设备的链路聚合技术,它通过将两台交换机组成一个逻辑设备,实现链路的负载分担和故障切换,从而提高网络的可靠性和稳定性。下面给大家详细介绍如何在…

游戏引擎学习第80天

Blackboard:增强碰撞循环,循环遍历两种类型的 t 值 计划对现有的碰撞检测循环进行修改,以便实现一些新的功能。具体来说,是希望处理在游戏中定义可行走区域和地面的一些实体。尽管这是一个2D游戏,目标是构建一些更丰富…

EMS专题 | 守护数据安全:数据中心和服务器机房环境温湿度监测

您需要服务器机房温度监测解决方案吗? 服务器机房是企业中用于存储、管理和维护服务器及其相关组件的设施。服务器机房通常位于数据中心内,是一个专门设计的物理环境,旨在确保服务器的稳定运行和数据的安全性。服务器机房主要起到存储和管理数…

4 AXI USER IP

前言 使用AXI Interface封装IP,并使用AXI Interface实现对IP内部寄存器进行读写实现控制LED的demo,这个demo是非常必要的,因为在前面的笔记中基本都需哟PS端与PL端就行通信互相交互,在PL端可以通过中断的形式来告知PS端一些事情&…

网络编程 | UDP套接字通信及编程实现经验教程

1、UDP基础 传输层主要应用的协议模型有两种,一种是TCP协议,另外一种则是UDP协议。在上一篇博客文章中,已经对TCP协议及如何编程实现进行了详细的梳理讲解,在本文中,主要讲解与TCP一样广泛使用了另一种协议&#xff1a…

A5.Springboot-LLama3.2服务自动化构建(二)——Jenkins流水线构建配置初始化设置

下面我们接着上一篇文章《A4.Springboot-LLama3.2服务自动化构建(一)——构建docker镜像配置》继续往下分析,在自动化流水线构建过程当中的相关初始化设置和脚本编写。 一、首先需要先安装Jenkins 主部分请参考我前面写的一篇文章《Jenkins持续集成与交付安装配置》 二、…

开发神器之cursor

文章目录 cursor简介主要特点 下载cursor页面的简单介绍切换大模型指定ai学习的文件指定特定的代码喂给ai创建项目框架文件 cursor简介 Cursor 是一款专为开发者设计的智能代码编辑器,集成了先进的 AI 技术,旨在提升编程效率。以下是其主要特点和功能&a…

基于机器学习随机森林算法的个人职业预测研究

1.背景调研 随着信息技术的飞速发展,特别是大数据和云计算技术的广泛应用,各行各业都积累了大量的数据。这些数据中蕴含着丰富的信息和模式,为利用机器学习进行职业预测提供了可能。机器学习算法的不断进步,如深度学习、强化学习等…

【王树森搜索引擎技术】概要01:搜索引擎的基本概念

1. 基本名词 query:查询词SUG:搜索建议文档:搜索结果标签/筛选项 文档单列曝光 文档双列曝光 2. 曝光与点击 曝光:用户在搜索结果页上看到文档,就算曝光文档点击:在曝光后,用户点击文档&…

图论DFS:黑红树

我的个人主页 {\large \mathsf{{\color{Red} 我的个人主页} } } 我的个人主页 往 {\color{Red} {\Huge 往} } 往 期 {\color{Green} {\Huge 期} } 期 文 {\color{Blue} {\Huge 文} } 文 章 {\color{Orange} {\Huge 章}} 章 DFS 算法:记忆化搜索DFS 算法&#xf…

ros2-7.5 做一个自动巡检机器人

7.5.1 需求及设计 又到了小鱼老师带着做最佳实践项目了。需求:做一个在各个房间不断巡逻并记录图像的机器人。 到达目标点后首先通过语音播放到达目标点信息, 再通过摄像头拍摄一张图片保存到本地。 7.5.2 编写巡检控制节点 在chapt7_ws/src下新建功…

告别繁琐编译!make和makefile的便捷之道

Linux系列 文章目录 Linux系列前言一、make/makefile是什么?二、make/makefile的使用2.1、语法规则2.2、依赖关系和依赖方法2.3、清理可执行文件2.4、执行依据 三、循环依赖问题总结 前言 上一篇博客给大家分享了在Linux下编译源代码的两个工具,gcc和g…

【鸿蒙】0x02-LiteOS-M基于Qemu RISC-V运行

OpenHarmony LiteOS-M基于Qemu RISC-V运行 系列文章目录更新日志OpenHarmony技术架构OH技术架构OH支持系统类型轻量系统(mini system)小型系统(small system)标准系统(standard system) 简介环境准备安装QE…

C语言初阶习题【29】杨氏矩阵

1. 题目描述——杨氏矩阵 有一个数字矩阵&#xff0c;矩阵的每行从左到右是递增的&#xff0c;矩阵从上到下是递增的&#xff0c;请编写程序在这样的矩阵中查找某个数字是否存在。 要求&#xff1a;时间复杂度小于O(N); 2. 思路 3. 代码实现1 #include<stdio.h>void fin…

Cloud Foundry,K8S,Mesos Marathon弹性扩缩容特性对比

一、Cloud Foundry 使用Scaling an Application Using App Autoscaler插件&#xff0c;基于资源使用情况触发简单扩缩容 CPU、内存、Http带宽、延时等 监控这些资源的使用情况决定扩缩容策略&#xff1a;实例是增加还是减少 Instance Limits 限制实例数量范围&#xff0c;定义…

中职网络建设与运维ansible服务

ansible服务 填写hosts指定主机范围和控制节点后创建一个脚本&#xff0c;可以利用简化脚本 1. 在linux1上安装系统自带的ansible-core,作为ansible控制节点,linux2-linux7作为ansible的受控节点 Linux1 Linux1-7 Yum install ansible-core -y Vi /etc/ansible/hosts 添加…

【BUUCTF】[GXYCTF2019]BabySQli

进入页面如下 尝试万能密码注入 显示这个&#xff08;qyq&#xff09; 用burp suite抓包试试 发现注释处是某种编码像是base编码格式 MMZFM422K5HDASKDN5TVU3SKOZRFGQRRMMZFM6KJJBSG6WSYJJWESSCWPJNFQSTVLFLTC3CJIQYGOSTZKJ2VSVZRNRFHOPJ5 可以使用下面这个网页在线工具很方便…

迅为瑞芯微RK3562开发板/核心板应用于人脸跟踪、身体跟踪、视频监控、自动语音识别(ASR)、图像分类驾驶员辅助系统(ADAS)...

可应用于人脸跟踪、身体跟踪、视频监控、自动语音识别(ASR)、图像分类驾驶员辅助系统(ADAS)、车牌识别、物体识别等。iTOP-3562开发板/核心板采用瑞芯微RK3562处理器&#xff0c;内部集成了四核A53Mali G52架构&#xff0c;主频2GHZ&#xff0c;内置1TOPSNPU算力&#xff0c;RK…

蓝桥杯单片机基础部分——5、DS18B20温度传感器

前言 好久没有更新关于蓝桥杯单片机相关的模块了&#xff0c;今天更新一下数字温度传感器DS18B20的相关应用 单线数字温度计DS1820介绍 DS1820数字温度计提供9位(二进制)温度读数&#xff0c;指示器件的温度。信息经过单线接口送入DS1820 或从 DS1820 送出&#xff0c;因此从…