Vue3 watch监视和watchEffect函数

Vue3 中的watch使用效果和Vue2 中配置watch配置项的使用效果是一致的。

使用watch监视之前,需要先对watch进行引入。

import {watch} from 'vue';

一、监视一个ref对象

以下情况只适用于监视一个ref对象。

watch(监视对象, (newValue, oldValue) => {  // 监视操作  }, {  // 配置项  })

配置项中可以开启两个配置项:

1. immediate  是否初始化时对监视属性进行一次监听。

2. deep  是否开启深度监视。

使用ref定义的数据一般都是普通数据类型,不需要开启深度监视。

 

setup() {let num1 = ref(0);watch(num1, (newValue, oldValue) => {console.log(`num1从${oldValue}变为了${newValue}`);})return {num1,};
},

如果我们监视的是一个传入值为对象类型的ref 的对象,这种情况下我们是不能对该对象进行监听的,两种解决方法:

1. 使用.value 对数据进行监听,因为ref 对象的value值为一个reactive 对象。传入基本数据类型的ref 对象的value 仅仅只是一个传入的数据值。

2. 使用深度监视

二、监视多个ref对象

监视多个ref 对象的情况下,我们就要把监视对象写为一个数组。

watch ([对象1, 对象2], (newValue, oldValue) => {  // 监视操作  }, {  // 配置项  })

setup() {let num1 = ref(0);let num2 = ref(1);watch([num1, num2], (newValue, oldValue) => {console.log(oldValue, newValue);})return {num1,num2};
},

点击顺序为num1 + 1,num2 + 1,num1 + 1,num2 + 1。

oldValue和newValue都变为了一个数组,第一个属性的值为数组的第一项,第二个属性为数组的第二项,不管是哪一个属性变化,都会触发监听。 

 

 

三、监视所有reactive对象

watch (监视对象, (oldValue, newValue) => {  // 监视操作  }, {  // 配置项  })

这里的监视属性为reactive对象,也就是是一个对象类型或数组类型。

setup() {let person = reactive({name: "张三",age: 18,job: {type: "前端",salary:10}})watch(person, (newValue, oldValue) => {console.log("perosn变化了", oldValue, newValue);})return {person};
},

如果我们点击两下年龄+1和一下薪水+1,会发现两点变化:

1. 我们无法正确获得oldValue的值。

2. Vue3 为我们默认开启了深度监视,无法关闭。

 

五、监视一个reactive对象

如果我们只想要监视一个reactive 对象,监视属性就需要传入一个函数,返回需要被监视的值。

watch (() => 监视属性, (newValue, oldValue) => {  // 监听操作  }, {  // 配置项  })

我们可以根据监视对象的数据类型来判断是否开启深度监视:

如果我们监听的是对象,就需要开启深度监视;如果我们监听的是基本数据类型,就不需要开启深度监视。 

注意:是reactive对象自动开启了深度监视,reactive对象的属性值没有开启深度监视

setup() {let person = reactive({name: "张三",age: 18,job: {type: "前端",salary:10}})watch(()=>person.age, (newValue, oldValue) => {console.log("perosnd的name属性变化了", oldValue, newValue);})return {person};
},

六、监视多个reactive对对象 

监视多个reactive 对象依旧是写成数组的形式。

watch ( [() => 属性1, () => 属性2] ,  (newValue, oldValue) => {  // 监听操作  }, {  // 配置项  })

setup() {let person = reactive({name: "张三",age: 18,job: {type: "前端",salary:10}})watch([()=>person.age, ()=>person.job], (newValue, oldValue) => {console.log(oldValue, newValue);}, {deep:true})return {person};
},

这里我们开启了深度监视才能监听到salary 的变化。 

基本数据类型的oldValue 值是没问题的,对象数据类型的oldValue 依旧是有问题的。

 

七、watchEffect函数

watchEffect 函数和watch 函数不同的点在于,我们不需要跟watchEffect 指明我们到底需要监听哪个属性,只要我们在watchEffect 函数中使用到了哪个属性,就会监听哪个属性。

使用watchEffect 函数之前需要先对其进行引入:

import { watchEffect } from 'vue';

语法格式如下: 

watchEffect (() => {  // 监听逻辑  });

在下面的代码中,我们在watchEffect 中使用到了num 和 person.job.salary ,所以就会监听这两个值的改变。

setup() {let num = ref(0);let person = reactive({job: {type: "前端",salary: 10,},});watchEffect(() => {let x = num.value;let y = person.job.salary;console.log("watchEffect函数的回调被执行了",x ,y);});return {num,person,};
},

注意:watchEffect 默认开启了immediate,但没有开启深度监视,且不能进行配置项设置。

watchEffect 就类似于computed计算属性,都能够监视属性值的变化。

不过computed 注重的是数据变化后的返回结果,watchEffect 注重的是数据变化后的逻辑处理。 

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

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

相关文章

【Python】Numpy(学习笔记)

一、Numpy概述 1、Numpy Numpy(Numerical Python)是一个开源的Python科学计算库,用于快速处理任意维度的数组。 Numpy使用ndarray对象来处理多维数组,该对象是一个快速而灵活的大数据容器, Numpy num - numerical 数…

android studio开发flutter应用,使用mumu模拟器调试软件

安装好mumu模拟器,先打开网易mumu模拟器的开发者模拟。系统应用 > 设置 > 关于手机 > 版本号 多点击几次调出开发者模式: 然后打开Hbulider软件:(具体应该是hbulider执行了一个adb命令,让android studio能识别…

探秘Vue组件间通信:详解各种方式助你实现目标轻松搞定!

🎬 江城开朗的豌豆:个人主页 🔥 个人专栏 :《 VUE 》 《 javaScript 》 📝 个人网站 :《 江城开朗的豌豆🫛 》 ⛺️ 生活的理想,就是为了理想的生活 ! ​ 目录 ⭐ 专栏简介 📘 文章引言 一…

详解 KEIL C51 软件的使用·建立工程

单片机要运行,就必须将程序代码下载到程序存储器内部,但是在写进单片机之前要先将你写 的程序转换成*.hex 或*.bin 的文件.不同系列的单片机都有不同的软件对其进行编绎,而 keil Cx51 是德国开发的一个专为 51 系列单片机提供的软件开发平台,基本上现在的所有 51 系列内核的单片…

第一篇 《随机点名答题系统》简介及设计流程图(类抽奖系统、在线答题系统、线上答题系统、在线点名系统、线上点名系统、在线考试系统、线上考试系统)

专栏目录 第一篇 《随机点名答题系统》简介及设计流程图(类抽奖系统、在线答题系统、线上答题系统、在线点名系统、线上点名系统、在线考试系统、线上考试系统)-CSDN博客 第二篇 《随机点名答题系统》——题库管理详解(类抽奖系统、在线答题…

鸿蒙系统扫盲(一):鸿蒙OS和开源鸿蒙什么关系?

我们经常提到鸿蒙,但是大家都分不清鸿蒙OS(Harmony OS)和 开源鸿蒙(Open Harmony)的区别? 1.开源鸿蒙(Open Harmony) 鸿蒙系统愿来的设计初衷,就是让所有设备都可以运行…

Hadoop3.3.4分布式安装

安装前提:已经配置好java环境,所有机器之间ssh的免密登录。 注意:下文中的flinkv1、flinkv2、flinkv3是三台服务器的别名 1.集群部署规划 注意:NameNode和SecondaryNameNode不要安装在同一台服务器 注意:ResourceMan…

C/C++轻量级并发TCP服务器框架Zinx-框架开发001: 读取标准输入,回显到标准输出

文章目录 完整代码实现参考-非项目使用项目使用的代码 - 乱-但是思路与上面的相同创建Kernel类添加删除修改epoll&#xff0c;才能写run方法创建stdin_Channel类在Kernel类中实现run方法 完整代码实现参考-非项目使用 #include <errno.h> #include <signal.h> #in…

BES2700H开发不完全手册

BES2700H开发不完全手册 是否需要申请加入数字音频系统研究开发交流答疑群(课题组)&#xff1f;可加我微信hezkz17, 本群提供音频技术答疑服务&#xff0c;群赠送语音信号处理降噪算法&#xff0c;ANC AEC ENC EQ BF BES蓝牙耳机音频资料 1 成功编译 2 代码 3 开放文档

windows系统pycharm程序通过urllib下载权重https报错解决

报错内容&#xff1a; raise URLError(unknown url type: %s % type) urllib.error.URLError: <urlopen error unknown url type: https> 解决办法记录&#xff1a; 1. 下载 pyopenssl : pip install pyopenssl 此时&#xff0c; import ssl 可以通过提示指导你安…

核心!华为自研系统鸿蒙趋势

鸿蒙系统的推出引起了全球的关注&#xff0c;毕竟这是华为自主研发的操作系统。这个系统有一些特点很独特。首先&#xff0c;它的自主可控性是一大特色。因为是自家研发的&#xff0c;所以更容易适应外界变化。其次&#xff0c;它采用了分布式架构&#xff0c;这样不同设备之间…

《从零开始读懂相对论》

内容简介 相对论诞生至今已逾百年&#xff0c;但依然被人们津津乐道。相对论为什么如此有魅力&#xff1f;爱因斯坦为什么要创立相对论&#xff1f;本书从“零”开始&#xff0c;紧抓“相对”二字&#xff0c;将所有问题置于历史的背景下&#xff0c;竭力展现人类探索运动本质…

【万字长文】Python 日志记录器logging 百科全书 之 日志过滤

Python 日志记录器logging 百科全书 之 日志过滤 前言 在Python的logging模块中&#xff0c;日志过滤器&#xff08;Filter&#xff09;用于提供更细粒度的日志控制。通过过滤器&#xff0c;我们可以决定哪些日志记录应该被输出&#xff0c;哪些应该被忽略。这对于复杂的应用…

Linux 程序开发流程 / 基本开发工具 / Vim / GCC工具链 / Make 工具 / Makefile 模板

编辑整理 by Staok。 本文部分内容摘自 “100ask imx6ull” 开发板的配套资料&#xff08;如 百问网的《嵌入式Linux应用开发完全手册》&#xff0c;在 百问网 imx6ull pro 开发板 页面 中的《2.1 100ASK_IMX6ULL_PRO&#xff1a;开发板资料》或《2.2 全系列Linux教程&#xf…

深入理解Kafka3.6.0的核心概念,搭建与使用

Kafka是最初由Linkedin公司开发&#xff0c;是一个分布式、支持分区的&#xff08;partition&#xff09;、多副本的&#xff08;replica&#xff09;&#xff0c;基于zookeeper协调的分布式消息系统&#xff0c;它的最大的特性就是可以实时的处理大量数据以满足各种需求场景&a…

多维时序 | MATLAB实现PSO-LSTM-Attention粒子群优化长短期记忆神经网络融合注意力机制的多变量时间序列预测

多维时序 | MATLAB实现PSO-LSTM-Attention粒子群优化长短期记忆神经网络融合注意力机制的多变量时间序列预测 目录 多维时序 | MATLAB实现PSO-LSTM-Attention粒子群优化长短期记忆神经网络融合注意力机制的多变量时间序列预测预测效果基本介绍模型描述程序设计参考资料 预测效果…

Moto edge s pro手机 WIFI和蓝牙连接不上 解决方法分享

2021年12月入手一台Moto Edge S Pro 12256版&#xff0c;看着性价比很高&#xff0c;越用越垃圾。屏幕显示没有vivo亮丽/APP图标很丑/屏幕上一点点水就失灵/拍照片边缘是模糊的/系统几乎不更新。 以上都可以忍受&#xff0c;但是&#xff1a; 用一年不到&#xff0c;蓝牙不能…

假如我是Langchain专家,你会问什么来测试我的水平

推荐Langchain YouTube 视频排行榜 1. 假如我是Langchain专家&#xff0c;你会问什么来测试我的水平&#xff1b; 作为Langchain专家&#xff0c;您可能需要回答一系列深入和具体的问题&#xff0c;这些问题旨在测试您对Langchain的理解和实际应用能力。以下是一些可能的问题…

Nginx 是如何解决惊群效应的?

什么是惊群效应&#xff1f; 第一次听到的这个名词的时候觉得很是有趣&#xff0c;不知道是个什么意思&#xff0c;总觉得又是奇怪的中文翻译导致的。 复杂的说&#xff08;来源于网络&#xff09;TLDR; 惊群效应&#xff08;thundering herd&#xff09;是指多进程&#xff…

开发vue3 UI组件库,并且发布到NPM

目录 1.创建vue3工程 2.创建package文件 3.编写组件&#xff0c;并且导出 4.编写package.json 5.npm账号注册登录并发布 6.从npm安装使用 7.注意事项 1.创建vue3工程 &#xff08;1&#xff09;初始化Vue项目 cnpm create vite &#xff08;2&#xff09;进入文件夹…