vue2 computed原理,与watch的区别

文章目录

    • computed实现原理
    • computed与watch的区别
      • computed
      • watch

computed实现原理

源码实现computed

  • 依赖收集:当我们首次访问一个计算属性时,它的 getter 函数会被执行。在 getter 函数执行过程中,会访问它所依赖的响应式数据,这时就会触发数据的 getter 函数。在数据的 getter 函数中,会把当前的计算属性(也即当前的 Watcher)添加到这个数据的依赖列表(Dep)中。这个过程叫做“依赖收集”。

  • 缓存:Vue 会为每个计算属性创建一个 Watcher 实例。这个 Watcher 中有一个 dirty 属性,表示计算属性的值是否需要重新计算。当计算属性的依赖发生改变时,就会把 dirty 属性设置为 true。当我们再次访问这个计算属性时,如果 dirty 为 true,就会重新计算属性的值,并把 dirty 设置为 false;如果 dirty 为 false,就直接返回之前的计算结果。

  • 依赖更新:当一个响应式数据发生改变时,会触发它的 setter 函数。在 setter 函数中,会遍历这个数据的依赖列表(Dep),调用每一个依赖(Watcher)的 update 方法。在计算属性的 update 方法中,会把 dirty 属性设置为 true,这样下次访问计算属性时就会重新计算它的值。

computed与watch的区别

在 Vue.js 中,computed 和 watch 都是常用的数据监控方法。它们都可以监视数据变化,但实现方式和适用场景不同。

computed

  • 是一种计算属性,会自动缓存结果,适合处理复杂和频繁使用的计算
  • 只有依赖的数据发生改变时才会重新计算,因此性能更高
  • 不支持异步,当 computed 内有异步操作时无效,无法监听数据的变化
  • 如果需要对数据进行计算并且结果会频繁使用,应该使用 computed

watch

  • 是一种观察者模式,需要手动执行回调函数,可用于执行异步操作等
  • watch 监听的数据每次发生变化都会执行回调函数,因此可能会造成性能瓶颈
  • 如果需要处理数据变化后执行其他操作,或监听数组或对象的变化,应该使用 watch

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

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

相关文章

智慧医疗时代来临,全视通给大家介绍智慧病房

随着科技的不断发展,智慧医疗已经成为医疗行业的一个重要趋势。智慧医疗技术的应用,不仅提高了医疗服务的效率和质量,也使得患者的就医体验更加舒适和便捷。在智慧医疗时代,智慧病房呼叫系统作为其中的一项重要技术,已…

用html编写的小广告板

用html编写的小广告板 相关代码 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</tit…

springboot003图书个性化推荐系统的设计与实现(源码+调试+LW)

项目描述 临近学期结束&#xff0c;还是毕业设计&#xff0c;你还在做java程序网络编程&#xff0c;期末作业&#xff0c;老师的作业要求觉得大了吗?不知道毕业设计该怎么办?网页功能的数量是否太多?没有合适的类型或系统?等等。今天给大家介绍一篇基于SpringBoot的图书个…

Langchain中向量数据库FAISS的使用

1 第一次存入数据库&#xff1a; from langchain_core.prompts import ChatPromptTemplate from langchain_core.output_parsers import StrOutputParser from langchain_community.embeddings import JinaEmbeddings from langchain_community.vectorstores import FAISS fro…

app广播亮暗屏幕监听

一、屏幕亮暗监听 /*** 息亮屏* 广播监听*/private ScreenStatusReceiver mScreenStatusReceiver;private class ScreenStatusReceiver extends BroadcastReceiver {String SCREEN_ON "android.intent.action.SCREEN_ON";String SCREEN_OFF "android.intent.a…

【深度学习】神经网络的学习

文章目录 常用损失函数均方误差函数&#xff08;mean squared error&#xff09;交叉熵误差函数&#xff08;cross entropy error&#xff09;/对数损失函数&#xff08;log loss function&#xff09; 数值微分&#xff08;numerical gradient&#xff09;前向差分&#xff08…

nacos只发现不发布服务fiddler请求转发到本地

https://blog.csdn.net/qq_38826019/article/details/109583854 nacos配置文件参数 spring.cloud.nacos.discovery.register-enabled : false fiddler转发 regex:http://xxx:8080/api/xxx/(?.)$ http://localhost:9209/${param}

2024.2.26

今天又复习了一下熟悉的C语言 #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<string.h> #include<windows.h>int main() {//数组初始化int n;scanf("%d", &n);int array[500];int i 0;for (i 0; i < n; i){scanf("%…

掌握ChatGPT润色绝技:什么是人工智能写作以及如何使用它来完成写作任务

如对AI写论文感兴趣&#xff0c;欢迎添加作者wx讨论 : ryan_2982 人工智能 (AI) 的出现开创了技术进步的新时代&#xff0c;彻底改变了包括写作和内容创作在内的各个行业。人工智能写作和人工智能提示已成为可以简化和增强写作任务的强大工具。在这篇博文中&#xff0c;我们将…

JAVA讲解算法-排序算法-冒泡排序算法-01

一、定义 冒泡排序&#xff08;Bubble Sort&#xff09;也是一种简单直观的排序算法。它重复地走访过要排序的数列&#xff0c; 一次比较两个元素&#xff0c;如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换&#xff0c;也就是说该数列已…

matplotlib 入门教程

一. matplotlib 简介 Matplotlib是一个Python 2D绘图库&#xff0c;它可以在各种平台上以各种硬拷贝格式和交互式环境生成出具有出版品质的图形。 Matplotlib试图让简单的事情变得更简单&#xff0c;让无法实现的事情变得可能实现。 只需几行代码即可生成绘图&#xff0c;直方…

求购EV代码签名证书,看看性价比最优选项要多少钱?

在当今的数字化时代&#xff0c;EV代码签名证书作为一种强化软件安全防线的顶级数字证书&#xff0c;承担着验证软件源码真伪和完整性的重要任务。对于软件开发者和公司来说&#xff0c;购置EV代码签名证书无疑是必不可少的&#xff0c;而其年度费用也成为各方密切关注的核心议…

【计算机网络】DNS/ICMP协议/NAT技术

文章目录 一、DNS(Domain Name System)1.DNS背景2.域名3.浏览器中输入url后,发生的事情 二、ICMP协议1.什么是ICMP协议2.ICM功能3.ICMP的报文格式4.ping命令5.traceroute命令 三、NAT技术1.NAT技术背景2.NAT IP转换过程3.NAPT4.NAT技术的缺陷5.NAT和代理服务器 四、TCP/IP五层模…

【数据结构和算法】链表的简单实现

目录 c版本c语言版 &#x1f431;‍&#x1f680;个人博客https://blog.csdn.net/qq_51000584/ &#x1f431;‍&#x1f464;收录专栏&#xff1a;数据结构和算法 &#x1f431;‍&#x1f453;专栏目标&#xff1a;分享一些学习的代码 &#x1f431;‍&#x1f4bb;作者&…

vue项目中vue.config.js文件的介绍

vue.config.js 是一个可选的配置文件&#xff0c;如果项目的根目录中没有这个文件&#xff0c;则 Vue CLI 会使用默认的配置。这个文件的主要目的是为了让开发者能够调整 Vue CLI 生成的项目的默认配置。 vue.config.js 应该导出一个包含了配置选项的对象。这些配置选项包括但…

React PureComponent 和 React.memo()区别

1 注意 ● PureComponent和memo仅作为性能优化的方式存在 ● 不要依赖它来阻止渲染&#xff0c;会产生BUG ● PureComponnet 和memo 都是通过对 props 值的浅比较来决定该组件是否需要更新的。 2 PureComponent 和React.memo() 区别 PureComponent 和React.memo()都是React优化…

Idea安装gideabrowser插件

Idea安装gideabrowser插件 一、安装二、设置教程 一、安装 gideabrowser链接地址 二、设置教程 在人生的舞台上&#xff0c;奋力拼搏&#xff0c;才能演绎出最精彩的人生之歌。面对挑战和困难&#xff0c;不妥协、不气馁&#xff0c;只争朝夕&#xff0c;方显坚韧与智慧。努…

如何使用Docker部署WBO容器并实现固定公网地址访问本地白板界面

&#x1f525;博客主页&#xff1a; 小羊失眠啦. &#x1f3a5;系列专栏&#xff1a;《C语言》 《数据结构》 《C》 《Linux》 《Cpolar》 ❤️感谢大家点赞&#x1f44d;收藏⭐评论✍️ 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&…

高防服务器的原理

高防服务器的原理主要是通过各种技术手段来识别和阻止网络攻击&#xff0c;包括但不限于防火墙、入侵检测系统、入侵防御系统、流量过滤和清洗、黑白名单机制、行动分析和机器学习、散布式缓存和CDN、反向代理和负载均衡等。123456789 这些技术可以有效地检测和…

fpmarkets澳福归类总结不同十字星K线的含义

不同的十字星K线代表了不同的含义&#xff0c;各位投资者你们知道这些十字星K线的含义吗&#xff1f;今天fpmarkets澳福就归类总结一下。 首先墓碑十字星和蜻蜓十字星归为一类&#xff0c;重点以墓碑十字星作为参考&#xff1a; 墓碑十字星是一种熊市反转烛台模式&#xff0c;当…