vue3 中的监听器

news/2024/11/23 3:26:59/

划重点:用户创建的侦听器回调,都会在 Vue 组件更新之前被调用。这意味着你在侦听器回调中访问的 DOM 将是被 Vue 更新之前的状态。如果想在侦听器回调中能访问被 Vue 更新之后的 DOM,你需要指明 flush: ‘post’ 选项:

1.watch

  • 及时回调 添加:immediate: true
  • 深度监听 添加:deep:true

用法:

...
const test = ref(0)
const test2 = reactive({id:1,name:'Jack'...})
const test3 = ref({id:1,name:'Jack'...})
// 监听一个普通类型或一个对象
watch(test,(newVal,oldVal)=>{...
})
watch(test2 ,(newVal,oldVal)=>{...
})
// 当是用ref声明的一个对象时,去监听整个对象 监听不到
watch(test3 ,(newVal,oldVal)=>{... // 无法监听到对象下对象的变化
})
// 监听对象的当个属性
watch(()=>test2.name,(newVal,oldVal)=>{...
})
// 监听对象的多个属性
watch(()=>[test2.id,test2.name],(newIdVal,newNameVal,oldIdVal,oldNameVal)=>{...
})

2.wathcEffect

  • 立即运行一个函数,同时响应式地追踪其依赖,并在依赖更改时重新执行。
  • watch 和 watchEffect 都能响应式地执行有副作用的回调。它们之间的主要区别是追踪响应式依赖的方式:

用法:

watch(todoId, async () => {const response = await fetch(`https://jsonplaceholder.typicode.com/todos/${todoId.value}`)data.value = await response.json()
}, { immediate: true })// 侦听器两次使用 todoId 的,一次是作为源,另一次是在回调中。以上例子改写为watchEffect 
watchEffect(async () => {const response = await fetch(`https://jsonplaceholder.typicode.com/todos/${todoId.value}`)data.value = await response.json()
})

3.watchPostEffect

  • watchEffect() 使用 flush: ‘post’ 选项时的别名。
  • 在侦听器回调中能访问被 Vue 更新之后的 DOM
watchPostEffect(()=>{})
// 等同于
watchEffect(() => {...}, {flush: 'post',}
)

4.watchSyncEffect

  • watchEffect() 使用 flush: ‘sync’ 选项时的别名。
  • 在某些特殊情况下 (例如要使缓存失效),可能有必要在响应式依赖发生改变时立即触发侦听器
watchSyncEffect(()=>{})
// 等同于
watchEffect(() => {...}, {flush: 'sync',}
)

5. 停止监听器

在 setup() 或 中用同步语句创建的侦听器,会自动绑定到宿主组件实例上,并且会在宿主组件卸载时自动停止。前提是侦听器必须用同步语句创建:如果用异步回调创建一个侦听器,那么它不会绑定到当前组件上,你必须手动停止它,以防内存泄漏

...
// 它会自动停止
watchEffect(() => {})// ...这个则不会!
const stop =setTimeout(() => {watchEffect(() => {})
}, 100)//要手动停止一个侦听器,请调用 watch 或 watchEffect 返回的函数:
beforeUnmount(()=>{
stop()
)
...

http://www.ppmy.cn/news/981032.html

相关文章

SpringCloudAlibaba微服务实战系列(一)Nacos服务注册发现

SpringCloudAlibaba微服务实战系列(一)Nacos服务注册发现 实战前先做一个背景了解。 单体架构、SOA和微服务 单体架构:近几年技术的飞速发展,各种各样的服务已经进入到网络化。单体架构发布时只需要打成一个war或jar包发布即可&a…

页面设计—FixedContainer固定容器组件详解

一、组件介绍 可任意拖动位置,脱离文档流布局,生成绝对定位的元素 二、如何使用 1、找到FixedContainer组件,拖放到页面位置。 2、设置是否拖动,设置高级样式,也可以在自定义样式里编写css样式 操作步骤如下&…

作为一名测试工程师,你知道“微信红包”怎么测试吗?

测试思维 测试任何事物的测试思路可以总结如下: 第一步:梳理产品的核心业务流程:明白这是个什么项目,实现了什么业务,以及是怎么实现的? 这个步骤一般是参考公司的需求文档来的,如果产品提供…

linux 学成之路(基础篇)(二十三)MySQL服务(下)

目录 一、用户权限管理概述 二、用户权限类型 三、用户赋予权限 四、删除权限 五、删除用户 一、用户权限管理概述 数据库用户权限管理是数据库系统中非常重要的一个方面,它用于控制不同用户访问和操作数据库的权限范围。数据库用户权限管理可以保护敏感数据和…

Asp.Net 使用Log4Net (SQL Server)

Asp.Net 使用Log4Net (SQL Server) 1. 创建数据库表 首先,在你的SQL Server数据库中创建一个用于存储日志的表。以下是一个简单的表结构示例: CREATE TABLE [dbo].[Logs]([Id] [INT] IDENTITY(1,1) PRIMARY KEY,[Date] [DATETIME] NOT NULL,[Thread] …

JSON格式Python,Java,PHP等封装获取淘宝商品详情描述数据API

淘宝是一个网上购物平台,售卖各类商品,包括服装、鞋类、家居用品、美妆产品、电子产品等。要获取淘宝天猫商品详情描述数据,您可以通过开放平台的接口或者直接访问淘宝天猫商城的网页来获取商品详情详细信息。以下是两种常用方法的介绍&#…

pacman 学习笔记

Pacman 软件包管理器是 Arch Linux 的一大亮点。它将一个简单的二进制包格式和易用的构建系统结合了起来。Pacman 的目标是简化对软件包的管理,无论软件包是来自官方软件仓库还是用户自己创建的软件包。 Pacman 通过和主服务器同步软件包列表来保持系统是最新的。这…

activemq消息中间件

ActiveMQ消息中间件详解 下载地址:https://activemq.apache.org/activemq-5015009-release 1、MQ的产品种类 1.1、消息中间件的特性/共同特性/共同维度 Kafka(大数据专用、由java/scala编写) API发送和接收MQ的高可用性MQ的集群和容错配置…