vue中的watch和watchEffect的区别

news/2025/2/21 16:16:30/文章来源:https://www.cnblogs.com/longmo666/p/18729434

在 Vue 3 中,watchwatchEffect 都是用于侦听数据变化并执行相应的副作用(side effects),但它们之间存在一些关键区别:

watch

  1. 显式指定监听的数据源:你需要明确指出要监听的响应式数据(如 ref 或 reactive 对象的属性)。
  2. 惰性执行:只有当被监听的数据发生变化时,回调函数才会被执行。首次创建 watcher 实例时不会立即执行回调。
  3. 提供旧值和新值:在回调函数中,你可以访问到被监听数据的旧值和新值,这对于需要比较前后状态的场景非常有用。
  4. 更灵活的配置选项:支持更多的选项,比如深度监听 (deep)、一次性监听 (immediate) 等。

示例:

import { ref, watch } from 'vue';const count = ref(0);watch(count, (newVal, oldVal) => {console.log(`count changed from ${oldVal} to ${newVal}`);
});count.value++; // 输出: count changed from 0 to 1

watchEffect

  1. 自动收集依赖:不需要显式指定监听哪些数据源,它会自动追踪在回调函数内部访问的所有响应式数据,并对这些数据进行监听。
  2. 立即执行一次:除了监听数据的变化外,还会在初次运行时立即执行一次以捕获当前状态。
  3. 仅提供当前值:只提供当前值给回调函数,不提供旧值。
  4. 更适合副作用管理:由于其自动追踪依赖的特性,非常适合于处理那些依赖多个响应式数据的情况。

示例:

import { ref, watchEffect } from 'vue';const count = ref(0);watchEffect(() => {console.log(`count is: ${count.value}`);
});count.value++; // 输出: count is: 1

总结

  • 使用 watch 当你需要:

    • 明确地监听一个或多个特定的数据源。
    • 访问旧值和新值。
    • 利用更高级的监听选项,如深度监听或立即执行。
  • 使用 watchEffect 当你希望:

    • 自动处理依赖关系而无需手动声明。
    • 在初始化时立即执行副作用,并在依赖项变化时重新执行。
    • 关注当前状态而非历史变化。

两者各有优势,选择哪一种取决于你的具体需求和偏好。

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

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

相关文章

让窗口显示在所有虚拟桌面上

功能如图 C#代码实现如下public partial class MainWindow : Window {public MainWindow(){InitializeComponent();ShowInTaskbar = false;this.Loaded += MainWindow_Loaded;}private void MainWindow_Loaded(object sender, RoutedEventArgs e){IntPtr a = new System.Window…

[Vite] 性能优化

关于HTTP: https://www.cnblogs.com/Answer1215/p/18729206 DNS 打包方式:所有代码(包括 lodash-es、element-ui 等)被打包到一起,部署时只需请求一个或几个大文件。 优点是简单,不需要额外的网络请求;缺点是文件体积大,首次加载延迟较高,而且用户如果之前访问过其他…

python 并发场景梳理

一、多进程(Multiprocessing) 1、使用场景 适合CPU密集型任务,因为每个进程运行在独立的Python解释器中,不受全局解释器锁(GIL)的影响。 2、代码from multiprocessing import Process import timedef task():print("Task is running")time.sleep(10)processes …

Pic2Word

目录概Pic2Word代码Saito K., Sohn K., Zhang X., Li C., Lee C., Saenko K., and Pfister T. Pic2Word: Mapping pictures to words for zero-shot composed image retrieval. CVPR, 2023.概 本文关注的是 Composed Image Retrieval (CIR) 任务: 给定一个 reference (query) i…

SciTech-EECS-BigDataAIML-NN(神经网络): 常用的18种Activation(激活函数)

SciTech-EECS-BigDataAIML-NN(神经网络): 常用的18种Activation(激活函数) 一:简介 二:为什么要用激活函数 三:激活函数的分类 四:常见的几种激活函数 4.1.Sigmoid函数 4.2.Tanh函数 4.3.ReLU函数 4.4.Leaky Relu函数 4.5.PRelu函数 4.6.ELU函数 4.7.SELU函数 4.8.Swish函数…

用了CRM后,业绩不升反滑?问题可能出在这6个地方!

用了CRM系统后,我的公司——客户跟丢了 销售效率下降了 业绩一落千丈哈哈,比我惨的还有谁?! 不过我潜心研究了一阵,终于把这个CRM系统给弄懂了! 今天就跟大家聊一聊,为什么用了CRM系统后不仅没能提升业绩,反而拖了后腿,这是踩了哪些坑?以及该怎么调整才能真正发挥CRM…

功率MOS管的参数说明

图解功率MOS管的每一个参数!最大额定参数 最大额定参数,所有数值取得条件(Ta=25℃)VDSS 最大漏-源电压 在栅源短接,漏-源额定电压(VDSS)是指漏-源未发生雪崩击穿前所能施加的最大电压。根据温度的不同,实际雪崩击穿电压可能低于额定VDSS。关于V(BR)DSS的详细描述请参见静电…

安卓系统远程控制电脑方法,手机远控教程,ToDesk工具

不知道大家有没有觉得手机、平板虽然很好用,却也仍存在有很多替代不了电脑的地方。 就比如说撰写文档、做数据报表啥的就不如PC端操作般方便,就跟别说PS修图、AE视频剪辑等需高性能设备来带动才易用的了。 好在也是有对策可解决,装个ToDesk远程控制工具便能实现各设备的互联…

功率器件热设计基础(八)——利用瞬态热阻计算二极管浪涌电流

上一篇讲了两种热等效电路模型,Cauer模型和Foster模型,这一篇以二极管的浪涌电流为例,讲清瞬态热阻曲线的应用。/ 前言 / 功率半导体热设计是实现IGBT、碳化硅SiC高功率密度的基础,只有掌握功率半导体的热设计基础知识,才能完成精确热设计,提高功率器件的利用率,降低系统…

利用 Sapnco 在.net/c# 中跨系统调用 SAP RFC 功能,执行SAP中的函数

利用Sapnco 在.net/c# 中跨系统调用 SAP RFC 功能,执行SAP中的函数 Sapnco -C#中使用的核心组件,sap官网有下,本文使用的版本在 framework 平台使用, sap 官网地址,但是下载要权限,全名称为: SAP Connector for Microsoft .NET ,链接:https://support.sap.com/en/pro…

SAP咨询公司排名探析:谁执牛耳?

SAP作为全球领先的软件集成供应商,其提供的ERP、CRM、SCM及BI等解决方案深受企业青睐。而SAP咨询公司,作为SAP软件实施、咨询与运维服务。如何评判这些咨询公司的实力呢?以下,我们将从分类、评估指标及领先公司等方面进行深入探讨。一、SAP咨询公司的双轨并行SAP咨询公司大…

Jmeter 自定义的respCode不是0就报异常

在实际使用中,后台其实已经对异常的进行了处理,response body 返回来的,都是正常的请求响应; 这个时候,则需要通过 respCode 进行判断该请求是否是有效响应。 如响应报文如下:{"respCode": 0,"errMsg": null,"data": 100000 } 处理:对 …