首页 > 其他分享 >对computed的处理

对computed的处理

时间:2024-03-25 16:33:05浏览次数:26  
标签:lazy computed 处理 value Watcher dirty 计算 属性

对computed的处理时,会遍历computed配置中的所有属性,为每一个属性创建一个Watcher对象,并把getter传入,这样一来,getter运行过程中就会收集依赖。但是和render函数不同,为计算属性创建的Watcher不会立即执行,因为要考虑到该计算属性是否会被渲染函数使用,如果没有使用,就不会得到执行。因此,在创建Watcher的时候,它使用了lazy配置,lazy配置可以让Watcher不会立即执行。

受到lazy的影响,Watcher内部会保存两个关键属性来实现缓存,一个是value,一个是dirty

value属性用于保存Watcher运行的结果,受lazy的影响,该值在最开始是undefined

dirty属性用于指示当前的value是否已经过时了,即是否为脏值,受lazy的影响,该值在最开始是true

Watcher创建好后,vue会使用代理模式,将计算属性挂载到组件实例中

当读取计算属性时,vue检查其对应的Watcher是否是脏值,如果是,则运行函数,计算依赖,并得到对应的值,保存在Watcher的value中,然后设置dirty为false,然后返回。

如果dirty为false,则直接返回watcher的value

巧妙的是,在依赖收集时,dirty被依赖的数据不仅会收集到计算属性的Watcher,还会收集到组件的Watcher

当计算属性的依赖变化时,会先触发计算属性的Watcher执行,此时,它只需设置dirty为true即可,不做任何处理。

由于依赖同时会收集到组件的Watcher,因此组件会重新渲染,而重新渲染时又读取到了计算属性,由于计算属性目前已为dirty,因此会重新运行getter进行运算

而对于计算属性的setter,则极其简单,当设置计算属性时,直接运行setter即可

标签:lazy,computed,处理,value,Watcher,dirty,计算,属性
From: https://www.cnblogs.com/zhanxinbing/p/18094708

相关文章

  • 这个SD插件处理服装太给力了!
    今天我为大家详细介绍了StableDiffusion中一个非常有用的插件,名为ADetailer。......
  • 记一次Java源码编译,三方包下载不下来的问题处理
    dataease项目后端的源码编译问题dataease后端项目,pom里有一个包,无法下载。源码里的定义如下:项目后端pom定义<!--calcite核心包--><dependency><groupId>org.apache.calcite</groupId><artifactId>calcite-core</artifactId><version>${calcite-core.......
  • 自然语言处理: 第十九章LoRA&QLoRA微调技巧
    论文地址:使用低秩自适应(LoRA)进行参数高效LLM微调-LightningAI—Parameter-EfficientLLMFinetuningWithLow-RankAdaptation(LoRA)-LightningAI本篇文章是由位来自威斯康星大学麦迪逊分校的统计学助理教授SebastianRaschka,也是人工智能平台LightningAI的......
  • 一个操作让数组处理速度快了5倍,到底是为什么
    概述:通过对数组进行排序,代码更好地利用了缓存,从而提高了程序的性能。这种现象通常被称为"缓存友好"(cache-friendly)或"空间局部性"(spatiallocality)今天做一个数组数据计算时,发现一个效率问题,给大家分享一下一个数组排序和不排序时同样的逻辑处理速度是不一样的。排序后速度......
  • Python利用pandas处理数据与分析
    pandas是基于NumPy的一种工具,该工具是为了解决数据分析任务而创建的。Pandas纳入了大量库和一些标准的数据模型,提供了高效地操作大型数据集所需的工具。pandas提供了大量能使我们快速便捷地处理数据的函数和方法。简单地说,你可以把Pandas看作是Python版的Excel。 pandas......
  • Cookie复用的妙用:数据处理中的高效利器!
    简介浏览网站时,服务器会往浏览器发一些数据,叫做Cookie。它是一种认证数据,存储在电脑浏览器上,用于后续访问时身份验证和记录登录信息。通常,服务器会把一些关键信息如用户ID,会话ID,密码等存在Cookie里。Cookie相当于个人信息,浏览器请求页面时携带Cookie,这样服务器就能通过......
  • 拦截器不生效的问题处理
    拦截器没有注册到容器中,不能被容器管理 主要由以下两个步骤:自定义拦截器类实现HandlerInterceptor接口自定义WebMvc配置类实现WebMvcConfigurer接口,添加自定义拦截器类主要是第二步缺少。第一步:自定义拦截器UserInterceptor:publicclassUserInterceptorimplemen......
  • 自定义异常以及统一处理自定义返回值
    需求,@ResponseStatus注解无法自定义返回值,所以放弃 实现/***自定义异常类*/publicclassMyExceptionextendsRuntimeException{//异常信息privateStringmessage;//构造函数publicMyException(Stringmessage){super(message);......
  • 纯技术开发出身 -- 给全国各地提供软件技术咨询服务的开展(大型信息系统建设、大数据处
    往往技术厉害的离不开现在工作的公司、需要有稳定的技术岗位工作、每个月需要按时还巨额房屋贷款,需要安心专注技术研究、安心手上的技术开发、日常技术难题解决等等,没精力全国各地开拓客户资源,也没精力对接各种不确定的客户需求;从社会分工的角度、还是需要有一些人精通技术然......
  • Python问题异常处理与日志结合
    我们掌握了try-except来处理程序运行中可能遇到的异常,以及使用logging来记录程序运行日志,该篇文章就结合二者来讲讲如何记录程序运行过程中的各种事件、状态信息以及遇到的异常情况,以便于追踪、诊断和解决程序运行时的问题。目录一、配置日志记录器 (logging.Logger)二、......