Vue3中watch和watchEffect的区别及使用场景

Vue3 中 watch 和 watchEffec t的区别及使用场景

在Vue 3中,watchwatchEffect是用于监听响应式数据变化的两个重要API。它们在使用方式和功能上有一些区别,下面将从不同方面进行比较。

1. 使用方式

watch的使用方式是通过在组件选项中定义一个watch对象,然后在其中定义需要监听的响应式数据和回调函数。例如:

watch: {count(newValue, oldValue) {// 响应式数据count发生变化时执行的回调函数console.log('count发生变化:', newValue, oldValue);}
}

watchEffect则是直接在组件内部使用,它会自动追踪组件中使用的响应式数据,并在数据变化时执行回调函数。例如:

watchEffect(() => {// 响应式数据发生变化时执行的回调函数console.log('响应式数据发生变化');
});

2. 监听ref定义的响应式数据

watch可以直接监听ref定义的响应式数据,例如:

watch(count, (newValue, oldValue) => {console.log('count发生变化:', newValue, oldValue);
});

watchEffect也可以监听ref定义的响应式数据,但是不需要显式地指定要监听的数据,它会自动追踪使用的响应式数据。

3. 监听reactive定义的响应式数据

watch可以监听reactive定义的响应式数据,但需要使用toRefs函数将reactive对象转换为ref对象,例如:

const state = reactive({count: 0
});watch(toRefs(state), (newValue, oldValue) => {console.log('count发生变化:', newValue.count, oldValue.count);
});

watchEffect同样可以监听reactive定义的响应式数据,无需额外处理。

4. 监听多个响应式数据

watch可以同时监听多个响应式数据,通过将需要监听的数据以数组的形式传递给watch函数,例如:

watch([count, name], ([countValue, nameValue], [countOldValue, nameOldValue]) => {console.log('count和name发生变化:', countValue, nameValue, countOldValue, nameOldValue);
});

watchEffect则无法直接监听多个响应式数据,需要通过在回调函数内部使用多个响应式数据来实现。

5. 监听对象中某个属性的变化

watch可以监听对象中某个属性的变化,通过在对象属性名前加上字符串插值'$'来指定要监听的属性,例如:

watch({'$user.name': (newValue, oldValue) => {console.log('user.name发生变化:', newValue, oldValue);}
});

watchEffect则无法直接监听对象中某个属性的变化,需要通过在回调函数内部使用对象属性来实现。

6. 深度监听(deep)

watch可以通过设置deep选项来进行深度监听,即递归监听对象内部的变化,例如:

watch(obj, (newValue, oldValue) => {console.log('obj发生变化:', newValue, oldValue);
}, { deep: true });

watchEffect默认会进行深度监听,无需额外设置。

7. 默认执行(immediate)

watch可以通过设置immediate选项来在初始渲染时立即执行回调函数,例如:

watch(count, (newValue, oldValue) => {console.log('count发生变化:', newValue, oldValue);
}, { immediate: true });

watchEffect默认会在初始渲染时立即执行回调函数,无需额外设置。

综上所述,watchwatchEffect在使用方式和功能上有一些区别。根据具体需求选择合适的API进行使用,可以更好地实现对响应式数据的监听和处理。

以上就是关于Vue 3中watchwatchEffect的区别的介绍,希望对你有所帮助!

参考文档:Vue 3 Composition API - Watch、Vue 3 Composition API - watchEffect

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

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

相关文章

centos7上源码安装mysql--运维高级

第一步,安装必要的依赖: yum install -y cmake ncurses-devel bison gcc gcc-c make unzip libaio numactl 第二步,创建mysql用户和组: wget http://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.18.tar.gz tar zxvf mysql-5.7.18.tar.gz 第三步,下载MySQL 5.7.18 源码…

postgres在docker中使用

记录个人开发过程中postgres在docker中的使用,以便后续查看。 Dockerfile 个人是在M1电脑上开发,所以platform使用linux/amd64来兼容amd芯片。 FROM --platformlinux/amd64 postgres:16.1-alpine COPY ./poetrydb.sql /docker-entrypoint-initdb.d/po…

Jenkins 如何查看已经记录登录服务器的凭证密码

文章目录 一、背景描述二、解决方案一(查看所有账号密码)三、解决方案二(查询指定账号密码) 一、背景描述 在日常的开发过程中,有时候会出现忘记开发、测试服务器的登录密码的情况。此时恰巧 Jenkins 上记录了登录该主…

【笔记】windows+pytorch:部署一下stable diffusion和NeRF

之前都是 *nix 环境使用 pytorch,这次尝试了一下windows。 我们来部署下流行性高的stable diffusion和我觉得实用性比stable diffusion高多了的NeRF Stable Diffusion 其实,我也不知道要写啥,都是按照步骤做就好了,后面等有时间…

如何快速生成项目目录结构树?

经常在网上看到下面这种由一个项目,生成一个结构树,你知道它是怎么生成的吗? 这就是利用本文要介绍的一个工具——Treer,treer就是一款专门用来快速生成目录结构树的命令行工具。 第一步:安装treer 在终端执行全局…

openssl 生成CA及相关证书

生成私钥文件(pem) # 生成私钥 # genrsa:生成RSA秘钥 # 2048:密钥长度为2048比特 # -out:私钥文件路径名 openssl genrsa -out ca_private.pem 2048 # 生成私钥,且加密 # -aes256:使用aes256对私钥进行加密 openssl g…

蓝桥杯第199题 扫地机器人 暴力优化 二分法 简单题 C++

题目 扫地机器人 - 蓝桥云课 (lanqiao.cn)https://www.lanqiao.cn/problems/199/learning/?page1&first_category_id1&name%E6%89%AB%E5%9C%B0%E6%9C%BA%E5%99%A8%E4%BA%BA 思路和解题方法 首先,通过cin语句输入了终点位置n和障碍物数量k。使用一个数组a来…

微服务学习|初识elasticsearch、操作索引库、文档操作、RestClient操作索引库、RestClient操作文档

初识elasticsearch 什么是elasticsearch? elasticsearch是一款非常强大的开源搜索引擎,可以帮助我们从海量数据中快速找到需要的内容。 elasticsearch结合kibana、Logstash、Beats,也就是elastic stack (ELK)。被广泛应用在日志数据分析、实…

asn1格式详解

ASN.1(Abstract Syntax Notation One)是一种用于描述数据结构的标准表示法。它通常用于描述数据交换格式,如证书、密钥和协议消息。ASN.1格式由一系列的类型和值组成,可以使用一些工具和库来解析和处理ASN.1格式的数据。 在C中&a…

python+pytest接口自动化(4)-requests发送get请求

python中用于请求http接口的有自带的urllib和第三方库requests,但 urllib 写法稍微有点繁琐,所以在进行接口自动化测试过程中,一般使用更为简洁且功能强大的 requests 库。下面我们使用 requests 库发送get请求。 requests库 简介 request…

【代码随想录】算法训练计划36

贪心 1、435. 无重叠区间 题目: 给定一个区间的集合 intervals ,其中 intervals[i] [starti, endi] 。返回 需要移除区间的最小数量,使剩余区间互不重叠 。 思路: 贪心,重叠个数,和射气球一样,重叠区间…

C# WPF上位机开发(倒计时软件)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing 163.com】 生活当中,我们经常会遇到倒计时的场景,比如体育运动的时候、考试的时候等等。正好最近我们学习了c# wpf开发,完…

力扣114. 二叉树展开为链表

思路: 根据二叉树前序遍历:根-左子树-右子树;要按照前序遍历将二叉树展开,则遍历节点右子树需要挂载到左子树“最右”节点右子树上;则当前节点 current 左子树 next current->left 的最右节点 rightmost &#xff…

记录一次现网问题排查(分享查域名是否封禁小程序)

背景: 收到工单反馈说现网业务一个功能有异常,具体现象是tc.hb.cn域名无法访问,客户地区是河南省,这里记录下排查过程和思路。 首先梳理链路 客户端域名 tc.hb.cn cname—> domainparking-dnspod.cn(新加坡clb)—> snat—&…

基于ssm的汽车论坛管理系统设计与实现

基于ssm的汽车论坛管理系统设计与实现 摘要:信息化社会内需要与之针对性的信息获取途径,但是途径的扩展基本上为人们所努力的方向,由于站在的角度存在偏差,人们经常能够获得不同类型信息,这也是技术最为难以攻克的课题…

论文学习-Attention Is All You Need

Attention Is All You Need 目前暂时不会用到,大概了解一下即可。 Recurrent model 序列化的计算方式,难以并行,随着序列的增长,以前的记忆会逐渐丢失。而Attention机制可以观察到句子中所有的信息,不受距离影响&…

vuepress-----2、初体验

2、初体验 目标 创建GitHub账号创建Github项目初体验vuepress默认主体的首页 初体验 (opens new window) --- home: true heroImage: /hero.png heroText: Hero 标题 tagline: Hero 副标题 actionText: 快速上手 → actionLink: /zh/guide/ features: - title: 简洁至上deta…

【傻瓜级JS-DLL-WINCC-PLC交互】7.​C#直连PLC并读取PLC数据

思路 JS-DLL-WINCC-PLC之间进行交互,思路,先用Visual Studio创建一个C#的DLL控件,然后这个控件里面嵌入浏览器组件,实现JS与DLL通信,然后DLL放入到WINCC里面的图形编辑器中,实现DLL与WINCC的通信。然后PLC与…

使用Redis实现接口防抖

说明:实际开发中,我们在前端页面上点击了一个按钮,访问了一个接口,这时因为网络波动或者其他原因,页面上没有反应,用户可能会在短时间内再次点击一次或者用户以为没有点到,很快的又点了一次。导…

php+redis抢购商品高并发实现

1、准备前库存先存储到redis // 创建Redis连接 $redis new Redis(); $redis->connect(127.0.0.1, 6379); // 假设Redis服务器在本地运行,端口为默认的6379 // 商品ID $productID 123; //库存 $stock10; $stockKey product: . $productID . :stock; $redis-&g…