29 Vue 中 v-if/show/for 的实现

news/2024/7/19 13:33:47 标签: vue, js, v-if, v-for

前言 

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

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

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

v-if 测试用例

测试用例如下, 主要是一个 if 的使用

这里我们仅仅跟进到 HelloWorld 这个 VueComponent 的 render 的地方就够了 

render 出来的 VNode 树是页面上的 dom 树的一个逻辑镜像 

vue 会维护 VNode 树 和 dom 树的一致, 这个是在上面经常看到的 patch, patchVNode 中去实现的

这里 HelloWorld 的 VueComponent 对应的 render 如下 

根据 counter 来判断是否需要 渲染 el-card, 进而 调整 VNode 的结构 

然后 vue 会维护 VNode 树 和 dom 树的一致, 这个是在上面经常看到的 patch, patchVNode 中去实现的 

v-show 测试用例 

测试用例如下, 一个简单的 v-show 的使用 

这里 HelloWorld 的 VueComponent 对应的 render 如下 

v-show 这里的实现是增加了一个 directives 的配置 

更新具体 dom 的 style 的地方在这里, 在原有的样式 和 none 之间来回切换 

v-for 测试用例

测试用例如下, 一个简单的 v-for 的使用 

这里 HelloWorld 的 VueComponent 对应的 render 如下 

这里 _vm._1 对应的是 vue 里面的一个 renderList 的一个函数, 遍历给定的列表 基于传入的回调渲染子节点 

这里 vue 的 renderList 的实现如下 

基于传入的 render 函数, 遍历 list, 传入 当前元素, 最终响应一个列表回去 


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

相关文章

如何做一个api接口

程序员是公司里的技术岗位,是产品经理最亲密的伙伴。但是程序员可以理解产品经理的工作,产品经理却不一定理解程序员的工作,所以经常被无良程序员欺骗。从 api接口这个维度,分析API的概念以及为什么要了解它,避免PM们在…

【JavaSE】Java基础语法(二十三):递归与数组的高级操作

文章目录 1. 递归1.1 递归1.2 递归求阶乘 2. 数组的高级操作2.1 二分查找2.2 冒泡排序2.3 快速排序2.4 Arrays (应用) 1. 递归 1.1 递归 递归的介绍 以编程的角度来看,递归指的是方法定义中调用方法本身的现象把一个复杂的问题层层转化为一个与原问题相似的规模较…

chatgpt赋能python:Python数值计算指南:为什么它是一种强大的工具

Python数值计算指南:为什么它是一种强大的工具 当谈到数值计算时,许多人所想到的编程语言都是MATLAB和R。然而,Python也在数值计算领域有着强大的地位。Python是一种令人难以置信的通用编程语言,它不仅为数据科学和机器学习提供了…

TCP通信流程详解

目录 什么是TCP协议? 三次握手和四次挥手 TCP通信流程: socket(): bind():绑定函数 listen():监听函数 accept():和客户端建立连接 connect():客户端连接服务器函数 read()/recv():读取函数 write() /send():写入函数 close():关闭连接 为什…

ESG成全球风潮,联想造了一个可持续的“进托邦”

不得不承认,全球经济前景仍然存在较大的不确定和挑战。全球经济疲软、地缘政治逆风、行业竞争加剧等多重压力让很多人都感受到了寒意。 在可预见的未来,我们将继续在一个复杂多变的全球环境中运营。 因此,著名的科技思想家凯文凯利提出&#…

PLC通信协议【西门子】几种常见的连接口和通讯协议简介

协议背景 1,mpi接口、dp接口、rs485接口、rs232接口具体区别? (一)mpi接口、dp接口:这两者均为基于RS485接口(可以理解为硬件标准)。mpi与dp是通信协议的名称(可以理解为软件)。 (二)MPI:MPI是多点接口(Multi Point Interface)的简称,是西门子公司开发的用于P…

chatgpt赋能python:Python文件夹的使用和优化

Python 文件夹的使用和优化 文件夹是计算机操作系统中最基本的存储单位之一。在计算机领域,文件夹也被称为目录。文件夹中可以存储多个文件或其他文件夹,使得文件在计算机中可以更好的组织和管理。基于Python语言,我们可以很容易地创建、读取…

c# cad二次开发 通过选择txt文件将自动转换成多段线

c# cad二次开发 通过选择txt文件将自动转换成多段线,txt样式如下 using System; using System.Collections.Generic; using System.Text; using Autodesk.AutoCAD.ApplicationServices; using Autodesk.AutoCAD.EditorInput; using Autodesk.AutoCAD.Runtime; usi…