Vue3 watch侦听器

一 侦听响应式ref

侦听响应式ref常量,当常量的ref的value值发生改变时会触发watch

一个小栗子:当输入框的输入内容变化时下方的文本也会跟着改变

<template><div class="box content"><div class="intro"><el-input v-model="input" @change="inputChange"></el-input></div><div class="intro"><el-text>{{ message }}</el-text></div>
</template>
<script setup>
import { ref, reactive, watch } from 'vue';
import { getCurrentInstance } from 'vue';const instance = getCurrentInstance().proxy;const input = ref("");
const message = ref("");watch(input, (newValue, oldValue) => {message.value = "input值发生了变化,newValue = " + newValue + ", oldValue = " + oldValue;
});/** 事件回调 */
const inputChange = () => {console.log("input value = ", input.value);
}
</script>
<style scoped lang="less">
.box{display: flex;flex-direction: column;margin: 10px;padding: 15px;.intro{padding: 20px;}
}
</style>

二 监听reactive响应式对象

系统默认是深层监听,当响应式对象的属性发生改变时,会触发watch

一个小栗子:当点击一次primary按钮时,可以看到cmpNum的count会加3

<template><div class="box content"><div class="intro"><el-button type="primary" @click="cmpNumChange">cmpNum.count = {{ cmpNum.count }}</el-button></div><div class="intro"><el-text>{{ cmpMsg }}</el-text></div></div>
</template>
<script setup>
import { ref, reactive, watch } from 'vue';
import { getCurrentInstance } from 'vue';const instance = getCurrentInstance().proxy;const cmpNum = reactive({count: 0});
const cmpMsg = ref("");// 监听reactive响应式对象,系统默认是深层监听,当响应式对象的属性发生改变时,会触发watch
// 当点击一次primary按钮时,可以看到cmpNum的count会加3
watch(cmpNum, (newValue, oldValue) => {cmpMsg.value = "cmpNum.cout = " + cmpNum.count;
});// 注:当监听响应式对象时,不能直接监听响应式对象的value
watch(() => cmpMsg.value,(value) => {console.log("watch cmpMsg value = ", value);}
)/** 事件回调 */
const cmpNumChange = () => {cmpNum.count = cmpNum.count + 2;console.log("cmpNum.value = ", cmpNum.count);
}
</script>
<style scoped lang="less">
.box{display: flex;flex-direction: column;margin: 10px;padding: 15px;.intro{padding: 20px;}
}
</style>

三 深层侦听器

直接给 watch() 传入一个响应式对象,会隐式地创建一个深层侦听器——该回调函数在所有嵌套的变更时都会被触发

一个小栗子 :当点击button时,会在回调事件中改变person的属性,从而触发侦听器watch

在使用时,主要是在代码中加入:{deep: true}

<template><div class="box content"><div class="intro"><el-button type="primary" @click="changePersonName">person name is {{ state.person.name }}</el-button></div></div>
</template>
<script setup>
import { ref, reactive, watch } from 'vue';
import { getCurrentInstance } from 'vue';const person = {name: "Pem", age: 20};
const state = ref({person: person});// 使用deep:true属性,进行对象的深层监听
watch (() => state.value.person,(newValue, oldValue) => {console.log("deep newValue = ", newValue);console.log("deep oldValue = ", oldValue);},{deep: true}
)/** 事件回调 */
const changePersonName = () => {state.value.person.name = input.value + ".Pem";
}
</script>
<style scoped lang="less">
.box{display: flex;flex-direction: column;margin: 10px;padding: 15px;.intro{padding: 20px;}
}
</style>

四 即时回调的侦听器

watch在默认情况下是懒加载的,仅在数据源发生变化时才会触发。但在某些场景下,我们希望在创建watch时立即执行一次回调。

我们可以通过传入 immediate: true 选项来强制侦听器的回调立即执行。

一个小栗子:

<template><div class="box content"><div class="intro"><el-input v-model="immediateInput"></el-input></div></div>
</template>
<script setup>
import { ref, reactive, watch } from 'vue';const immediateInput = ref("");// 即使回调的侦听器
/* 
watch默认是懒执行的:仅当数据变化时,才会执行回调。但在某些场景中,我们希望在创建某些侦听器时,
立即执行一遍回调。举例来说,我们想请求一些初始数据,然后在相关状态更改时重新请求数据
在下面的例子中,可以看到在页面第一次渲染出来后就可以看到在watch中设置的初始值,说明这个watch
被执行了一次
*/
watch (() => immediateInput.value,(newValue, oldValue) => {console.log("new value = ", newValue);if (newValue === "") {getStartValue();}},{immediate: false}   //这里需要加入这句
)
function getStartValue(){immediateInput.value = "start base value";console.log("getStartValue");
} 
</script>
<style scoped lang="less">
.box{display: flex;flex-direction: column;margin: 10px;padding: 15px;.intro{padding: 20px;}
}
</style>

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

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

相关文章

【C语言】字符分类函数与字符转换函数

1. 字符分类函数 C语言中有⼀系列的函数是专门做字符分类的&#xff0c;也就是⼀个字符是属于什么类型的字符的。 这些函数的使用都需要包含⼀个头文件是 ctype.h 这些函数的使用方法非常类似&#xff0c;我们就讲解⼀个函数的事情&#xff1a; int islower ( int c ); islow…

Linux 15个常用脚本练习(初级)

&#xff08;1&#xff09;用户猜数字 #!/bin/bash # 脚本生成一个 100 以内的随机数,提示用户猜数字,根据用户的输入,提示用户猜对了, # 猜小了或猜大了,直至用户猜对脚本结束。 # RANDOM 为系统自带的系统变量,值为 0‐32767的随机数 # 使用取余算法将随机数变为 1‐100 的…

js中函数参数的归一化处理

在 JavaScript 中&#xff0c;函数参数的归一化处理是一种将不同类型或格式的参数转换为统一的标准或格式的过程。这样做的目的是为了提高代码的灵活性、可维护性和可重用性。 以下是一些常见的函数参数归一化处理的方式&#xff1a; 数据类型转换&#xff1a;将不同类型的参数…

软考高级,高项和架构哪个更容易?

软考高级共有5个科目&#xff0c;考试难度都是偏大的。相对而言&#xff0c;信息系统项目管理师的考试难度小于系统架构设计师&#xff0c;不过目前高项是1年1考&#xff0c;架构是1年2考&#xff0c;从这个层面来说&#xff0c;通过架构考试的机会要多一些。 架构&高项考…

RabbitMq——direct交换器和fanout交换器 扇形交换器

direct交换器&#xff1a; Configuration 发送 Bean protected Queue queue&#xff08;&#xff09;{ Queue queue new Queue&#xff08;“myQueue”&#xff09; return queue&#xff1b; } amqpTemplate.convertAndSend("myQueue","这是发送的内…

pytorch_fid计算fid

pip install pytorch-fid from pytorch_fid import fid_score# 准备真实数据分布和生成模型的图像数据 real_images_folder xxx generated_images_folder xxx# 计算FID距离值 fid_value fid_score.calculate_fid_given_paths([real_images_folder, generated_images_folder]…

【测试开发】自动化测试 selenium 篇

目录 一. 什么是自动化测试 二. selenium 1. selenium的工作原理 2. seleniumJava的环境搭建(Chrome浏览器) 三. selenium中常用的API 1. 定位元素 findElement 1.1 css选择语法 1.2 xpath 2. 操作测试对象 2.1 sendKeys-在对象上模拟按键输入 2.2 click-点击对象…

mmap访问内存方式

mmap访问内存方式 请看下面的Java代码&#xff0c;这段程序是取自1brc竞赛的第一名的代码。 public static void main(String[] args) throws IOException, InterruptedException {... ...try (var fileChannel FileChannel.open(java.nio.file.Path.of(FILE), java.nio.fil…

elasticsearch8.12 分词器安装

分词器的主要作用将用户输入的一段文本&#xff0c;按照一定逻辑&#xff0c;分析成多个词语的一种工具 分词器下载地址 analysis-ik Releases infinilabs/analysis-ik GitHub 一个简便 安装方式 安装完成之后 会提示重启&#xff0c;重启es即可 ./bin/elasticsearch-pl…

配置LVS NAT模式

配置LVS NAT模式 环境准备 client1&#xff1a;eth0->192.168.88.10&#xff0c;网关192.168.88.5lvs1: eth0 -> 192.168.88.5&#xff1b;eth1->192.168.99.5web1&#xff1a;eth1->192.168.99.100&#xff1b;网关192.168.99.5web2&#xff1a;eth1->192.168…

基于C语言的“贪吃蛇”游戏设计理念

3.功能描述&#xff1a;本游戏主要实现以下几种功能 图1.游戏功能模块 3.1. 贪吃蛇的控制功能&#xff1a;通过各种条件的判断&#xff0c;实现对游戏蛇的左移、右移、下移、上移、自由移动&#xff0c;贪吃蛇的加长功能。 3.2. 游戏显示更新功能&#xff1a;当贪吃蛇左右移动、…

容器只适用于微服务吗?

容器是一种技术&#xff0c;它将应用及其依赖项打包成一个可移植的单元&#xff0c;以便在不同的计算环境中一致地运行。这种技术确实在微服务架构中得到了广泛应用&#xff0c;因为容器可以帮助实现微服务的快速部署、水平扩展和管理。 然而&#xff0c;容器并不仅限于用于微…

操作系统笔记之进程调用API中的getpid、fork、wait、exec补充

操作系统笔记之进程调用API中的getpid、fork、wait、exec补充 code review! —— 杭州 2024-03-17 夜 文章目录 操作系统笔记之进程调用API中的getpid、fork、wait、exec补充1.getpid()2.fork()3.wait()4.exec()5.通常&#xff0c;exec() 调用与 fork() 调用一起使用&#xff…

Leetcode 3080. Mark Elements on Array by Performing Queries

Leetcode 3080. Mark Elements on Array by Performing Queries 1. 解题思路2. 代码实现 题目链接&#xff1a;3080. Mark Elements on Array by Performing Queries 1. 解题思路 这一题我们只需要按照题意进行一下实现就行了。具体来说的话&#xff0c;我们只需要依序遍历一…

算法笔记p154最大公约数和最小公倍数

目录 最大公约数辗转相除法证明例子代码实现 最小公倍数代码实现 最大公约数 正整数a与b的最大公约数是指a与b的所有公约数中最大的那个公约数&#xff0c;一般用gcd(a, b)表示a和b的最大公约数。 辗转相除法 设a、b均为正整数&#xff0c;则gcd(a, b) gcd(b, a % b)。即被…

【C语言_字符函数和字符串函数_复习篇】

目录 一、字符函数 1.1 字符分类函数 1.2 字符转换函数 二、字符串函数 2.1 strlen函数 2.1.1 strlen函数的使用 2.1.2 strlen函数的模拟实现 2.2 strcpy函数 2.2.1 strcpy函数的使用 2.2.2 strcpy函数的模拟实现 2.3 strcat函数 2.3.1 strcat函数的使用 2.3.2 strcat函数的…

hololens2发布unity设置

生成vs工程再向hololens发布时&#xff0c; Architecture选X64或ARM64都可以成功发布

es索引操作命令

索引操作 index 创建索引 put 方法创建索引 使用 put 创建索引时必须指明文档id&#xff0c;否则报错 # PUT 创建命令 # test1 索引名称 # type1 类型名称&#xff0c;默认为_doc&#xff0c;已经被废弃 # 1 文档id PUT /test1/type1/1 {"name":"zhangsan&…

能不能绕过c去学c++?

目前做工程开发&#xff0c;基本都是c/c混着用的&#xff0c;c/c是同源的&#xff0c;c/是在c的基础上发展起来的&#xff0c;它们之间有些联系和区别&#xff1a; 区别&#xff1a; 1.可用库不同 c基本是系统底层语言&#xff0c;一般系统底层开发用c&#xff08;例如&…

【leetcode】二叉树的前序遍历➕中序遍历➕后序遍历

大家好&#xff0c;我是苏貝&#xff0c;本篇博客带大家刷题&#xff0c;如果你觉得我写的还不错的话&#xff0c;可以给我一个赞&#x1f44d;吗&#xff0c;感谢❤️ 目录 1. 二叉树的前序遍历2. 二叉树的中序遍历3. 二叉树的后序遍历 1. 二叉树的前序遍历 点击查看题目 根…