27 VueComponent 计算属性的实现

news/2024/7/10 2:50:32 标签: vue, js, computed

 前言 

这是最近的碰到的那个 和响应式相关的问题 特定的操作之后响应式对象不“响应“了 引起的一系列的文章 

主要记录的是 vue 的相关实现机制 

呵呵 理解本文需要 vue 的使用基础, js 的使用基础 

 测试用例

用例如下, 我们这里核心关注 counterPlus100 这个计算变量 

问题的调试

从上下文来看 这是这里是在渲染 HelloWorld 组件的地方

渲染 “this is counterPlus100 : 100” 对应的 #text 节点, 需要获取 this.counterPlus100 的值 

编译出来的 render 函数如下 

获取变量的值的方式如下, 如果有依赖被更新了, 则重新计算 

否则 直接获取之前计算的结果

这个就是官方文档提到的 “计算属性缓存”, 下一次获取对应的值, 如果依赖没有变化, 则直接获取 Watcher.value

计算属性缓存 的具体的体现方式, 业务代码中访问 计算属性的时候, 直接走 counterPlus100 的 computedGetter

初始化 VueComponent.counterPlus100 的 getter 的地方 

初始化 this._computedWatchers 的地方 

当 counter 变量更新的时候, 第二个 Watcher 是 counterPlus100 的 Watcher 

它是懒处理的, 他仅仅是更新了 dirty 的标记, 然后 下一次获取 counterPlus100 值的时候 重新计算

counterPlus100 对应的 Watcher 的处理如下 


http://www.niftyadmin.cn/n/365009.html

相关文章

python+django高校就业求职招聘信息服务系统_8ryq3

本文论述了高校就业信息服务系统的设计和实现,该网站从实际运用的角度出发,运用了计算机网站设计、数据库等相关知识,基于系统管理和Mysql数据库设计来实现的,网站主要包括用户、企业、人才库、面试邀请、岗位分类、招聘信息、应聘…

Git进阶·壹

文章目录 1 Git进阶——GitFlow工作流程1.1 master与develop分支1.1.1 master1.1.2 develop 1.2 feature分支1.3 Release分支1.4 hotfix分支1.5 GitFlow示例1.5.1 在master上新建dev分支1.5.2 基于dev创建feature分支1.5.3 feature分支上开发业务代码1.5.4 将feature合并到dev1…

什么时候用断言?

assertion (断言) 在软件开发中是一种常用的调试方式,很多开发语言中都支持这种机制。 在实现中,assertion 是在程序中的一条语句,它对一个boolean 表达式进行检查, 一个正确程序必须保证这个boolean 表达式的值为true ; 如果…

LC-1093. 大样本统计

1093. 大样本统计 难度中等28 我们对 0 到 255 之间的整数进行采样,并将结果存储在数组 count 中:count[k] 就是整数 k 在样本中出现的次数。 计算以下统计数据: minimum :样本中的最小元素。 maximum :样品中的最大元素。 m…

PLX31-EIP-MBTCP 以太网/IP到Modbus TCP/IP

PLX31-EIP-MBTCP ProSoft Technology的EtherNet/IP to Modbus TCP/IP通信网关允许在支持EtherNet/IP的控制器或设备与Modbus TCP/IP控制器或设备之间进行高速双向数据传输。 我们的Modbus TCP/IP驱动程序具有多种客户端和服务器功能,可实现更快的数据传输。此外&a…

26 VueComponent 其他属性的更新

前言 这是最近的碰到的那个 和响应式相关的问题 特定的操作之后响应式对象不“响应“了 引起的一系列的文章 主要记录的是 vue 的相关实现机制 呵呵 理解本文需要 vue 的使用基础, js 的使用基础 测试用例 比如这里看一下 class 的更新 测试用例如下, 增加 topClazz …

【软考系统规划与管理师笔记】第2篇 信息技术知识1

目录 1 软件工程 1.1 软件需求分析与定义 1.2 软件设计、测试与维护 1.3 软件质量保证及质量评价 1.4 软件配置管理 1.5 软件过程管理 1.6 软件复用 2 面向对象系统分析与设计 2.1 面向对象设计的基本概念 2.2统一建模语言与可视化建模 3. 应用集成技术 3.1 数据库与…

线程和进程区别

什么是线程和进程? 进程 一个在内存中运行的应用程序。每个进程都有自己独立的一块内存空间,一个进程可以有多个线程,比如在Windows系统中,一个运行的xx.exe就是一个进程。 线程进程中的一个执行任务(控制单元)&#…