当前位置: 首页 > news >正文

学习vue3:监听器

目录

一,关于监听的概述

二,手动监听器(watch函数)

watch()函数语法

监听基本数据类型

监听对象,对象属性

三,自动监听器(watchEffect函数)

watchEffect()函数语法


一,关于监听的概述

在前端界面,当数据发生变化时,对变化后的数据做出及时处理。这里我举一个生活上的例子

在我们学生时代,我们指导,当中午12点下课铃声响起时,就去吃饭。这如果套用“监听”的方式

是不是可以说,监听的数据是时间,当指向12点,就对变化后的时间做出反馈。


二,手动监听器(watch函数)

watch 是一个用于观察和响应Vue响应式系统中数据变化的方法。它允许你指定一个数据源(可以是响应式引用、计算属性、组件的属性等),当这个数据源的值发生变化时,你可以执行一些响应

watch()函数语法

  • source:可以是一个响应式引用(ref)、响应式对象(reactive)、getter 函数或一个数组(包含多个监听源)。

  • callback:当监听的源发生变化时,会调用这个回调函数。回调函数接收两个参数:newValueoldValue

  • options:可选参数,用于配置 watch 的行为。常见的选项包括:

    • immediate:布尔值,表示是否立即执行回调函数,默认为 false

    • 代码deep:布尔值,表示是否深度监听对象的变化,默认为 false

import { watch } from 'vue';watch(source, callback, options);

示例

监听基本数据类型

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title>
</head>
<body><div id="app"><select v-model="selectValue"><option value="0">请选择</option><option value="100">西瓜</option><option value="200">苹果</option><option value="300">香蕉</option><option value="400">草莓</option></select></div><script type="module">import {createApp,ref,watch} from 'https://unpkg.com/vue@3/dist/vue.esm-browser.js'createApp({setup(){const selectValue = ref(0)watch(selectValue,(e,e1,e2)=>{console.log(e)console.log(e1)console.log(e2)})return {selectValue,}}}).mount('#app')</script>
</body> 
</html>

测试结果

通过watch函数监听selectValue(第一个参数) 的变化,第二个参数是 回调函数用于检测到数据发生变化后,做出处理!其中 参数 e:当前数据值 ;e1:上一个数据值;e2:回调函数


监听对象,对象属性

注意:如果监听的是复杂的数据,使用 回调函数

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title>
</head>
<body><div id="app"><select v-model="obj.money"><option value="0">请选择</option><option value="100">西瓜</option><option value="200">苹果</option><option value="300">香蕉</option><option value="400">草莓</option></select><p>你选择了:{{obj.money}}</p></div><script type="module">import {createApp,ref,watch,reactive,watchEffect} from 'https://unpkg.com/vue@3/dist/vue.esm-browser.js'createApp({setup(){const selectValue = ref(0)const obj=reactive({name:"dj",money:30})watch(()=>obj.money,(e,e1,e2)=>{console.log(e)console.log(e1)console.log(e2)    })return {obj}}}).mount('#app')</script>
</body> 
</html>

测试结果

注意到watch函数监听数据是对象的属性obj.money 的变化,e,e1,e2参数分别表示obj.money当前值,上一次值,以及回调函数本身


三,自动监听器(watchEffect函数)

watchEffect()函数语法

effect(必选) :回调函数,写监听后的逻辑代码

options(可选)
类型:Object
说明:配置选项,用于控制 watchEffect 的行为。常见的选项包括:

  • flush:控制回调函数的执行时机,默认值是 'pre'。
  • 'pre':在组件 DOM 更新之前执行回调函数。
  • 'post':在组件 DOM 更新之后执行回调函数。
  • 'sync':立即同步执行回调函数(默认行为)。
  • onTrack:一个回调函数,用于追踪依赖的响应式数据。当副作用函数访问响应式数据时,会调用这个回调函数。
  • onTrigger:一个回调函数,用于触发回调函数执行。当依赖的响应式数据发生变化时,会调用这个回调函数。

watchEffect(effect, options)

watchEffect函数 自动监听,没有设置监听对象,表示监听所有,通过条件判断,执行相关任务。

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title>
</head>
<body><div id="app"><select v-model="obj.money"><option value="0">请选择</option><option value="100">西瓜</option><option value="200">苹果</option><option value="300">香蕉</option><option value="400">草莓</option></select><p>你选择了:{{obj.money}}</p></div><script type="module">import {createApp,ref,watch,reactive,watchEffect} from 'https://unpkg.com/vue@3/dist/vue.esm-browser.js'createApp({setup(){const selectValue = ref(0)const obj=reactive({name:"dj",money:30})watchEffect(()=>{console.log("effect!!!!!!!!!!!!!!!!!")if(obj.name=="100"){console.log("西瓜")}else if(obj.money=="200"){console.log("苹果")}else if(obj.money=="300"){console.log("香蕉")}else if(obj.money=="400"){console.log("草莓")}else{console.log("请选择")}})return {selectValue,obj}}}).mount('#app')</script>
</body> 
</html>

测试结果


文章转载自:

http://YvxCuiT7.qmwzr.cn
http://XIKbPvsq.qmwzr.cn
http://kk8sGsDw.qmwzr.cn
http://hGlarJdm.qmwzr.cn
http://Za1J0gpp.qmwzr.cn
http://4yPwdyWa.qmwzr.cn
http://1CC52I9B.qmwzr.cn
http://wqmFQRZl.qmwzr.cn
http://fbcyOZZv.qmwzr.cn
http://k5NC4xdk.qmwzr.cn
http://Axygr7gW.qmwzr.cn
http://8F35c3os.qmwzr.cn
http://DkfpO6Qn.qmwzr.cn
http://S0cBmQSH.qmwzr.cn
http://M78UXcwC.qmwzr.cn
http://Maeqfnqw.qmwzr.cn
http://Ae0jdUX0.qmwzr.cn
http://5BnVNJwi.qmwzr.cn
http://YzlnulC1.qmwzr.cn
http://X8NWwfd1.qmwzr.cn
http://vx84FWwT.qmwzr.cn
http://Jak8aSm2.qmwzr.cn
http://uLUoVHgA.qmwzr.cn
http://LUH2x59d.qmwzr.cn
http://OoxWWcmB.qmwzr.cn
http://a4R9nq0z.qmwzr.cn
http://4JujG6pt.qmwzr.cn
http://aG4hD9ji.qmwzr.cn
http://A5lv1FVd.qmwzr.cn
http://S4ybQCy5.qmwzr.cn
http://www.dtcms.com/a/201471.html

相关文章:

  • 统一端点管理(UEM):定义、优势与重要性
  • React 第四十三节 Router中 useBlocker 的使用详解及案例注意事项
  • 游戏引擎学习第298天:改进排序键 - 第1部分
  • Java 单元测试框架比较:JUnit、TestNG 哪个更适合你?
  • 宿州金博学校开展防震演练:夯实安全根基,守护校园平安
  • 机器学习算法-聚类K-Means
  • 凸优化系列——First-order method
  • RestFul操作ElasticSearch:索引与文档全攻略
  • DeepSpeed简介及加速模型训练
  • Spring Boot中如何使用RabbitMQ?
  • 【Go-2】基本语法与数据类型
  • Qt动态生成 UI
  • 零基础深入解析 ngx_http_session_log_module
  • 系统架构设计师软考要点分析及知识学习指南
  • 【Python装饰器深潜】从语法糖到元编程的艺术
  • 人工智能如何做主题班会PPT?
  • 量子计算的曙光:从理论奇点到 IT 世界的颠覆力量
  • 鸿蒙HarmonyOS多设备流转:分布式的智能协同技术介绍
  • 【华为鸿蒙电脑】首款鸿蒙电脑发布:MateBook Fold 非凡大师 MateBook Pro,擎云星河计划启动
  • BRIGHTONE : 520-On-Chain WOHOO Carnival
  • TYUT-企业级开发教程-第8章
  • 基于规则引擎与机器学习的智能Web应用防火墙设计与实现
  • 【数据库课程设计】网上投票管理系统
  • 【Linux】进程间通信(三):命名管道
  • PyTorch进阶实战指南:01自定义神经网络组件开发
  • JavaScript 性能优化:调优策略与工具使用
  • Java转Go日记(四十四):Sql构建
  • 深入解析 HTTP 中的 GET 请求与 POST 请求​
  • Android Framework学习七:Handler、Looper、Message
  • 【DCGMI专题1】---DCGMI 在 Ubuntu 22.04 上的深度安装指南与原理分析(含架构图解)