vue源码分析(六)——vnode 和 createElement的使用和作用

news2024/12/25 0:49:02

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 前言
  • 一、Vnode是什么?
  • 二、create-element.ts文件
    • 1.createElement 方法
    • 2. _createElement 方法
      • (1)createEmptyVNode 方法
      • (2)normalizeChildren 和simpleNormalizeChildren 方法
      • (3)_render 函数的返回值
    • 3.createElement 方法最终返回
  • 总结


前言

提示:这里可以添加本文要记录的大概内容:

例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。


提示:以下是本篇文章正文内容,下面案例可供参考

一、Vnode是什么?

路径 :src\core\vdom\vnode.ts
定义:VNode 就是对真实Dom 的一种抽象描述。由于VNode只是用来映射到真实DOM的渲染,不需要操作DOM的发方法,导致VNode 非常的轻量和简单。而VNode 的创建就是之前提到的createElement方法创建的。也就是该文章所讲的重点。

在这里插入图片描述

如上图:其实重要的VNode 的属性不过就是tag(标签)、data(存储相关的数据)、children(VNode的子节点) 等。

二、create-element.ts文件

路径:src\core\vdom\create-element.ts

1.createElement 方法

参数说明:content vm的实例
tag vnode 的标签(可以判断vnode是不是组件)
data vnode 相关的数据
children vnode的子组件
在这里插入图片描述

本质上是一个处理_createElement 方法参数的方法。在createElement最后面会返回_createElement方法。

2. _createElement 方法

(1)createEmptyVNode 方法

路径:src\core\vdom\vnode.ts
如果没有tag的话,就创建一个vnode,这个方法在vnode.ts文件中。方法中new VNode ,然后返回这个VNode。

在这里插入图片描述
在这里插入图片描述

(2)normalizeChildren 和simpleNormalizeChildren 方法

路径:src\core\vdom\helpers\normalize-children.ts
simpleNormalizeChildren 就是遍历,如果遍历的item还是数组类型,就通过数组的concat方法将两个数组拼成一个,也就是将一个可能是多维数组变成一维数组,也就是所谓的扁平化数组逻辑。

normalizeChildren方法(里面的方法在多个文件中且比较简单,就不贴图详细说明了
isPrimitive判断是不是基础数据类型的方法。
    是基础数据类型就执行createTextVNode(children)方法,实例化一个vnode,将基础数据的文本(children)创建成一个vnode。也就是创建一个文本为children的vnode。
isArray 判断是不是数组的方法。
    不是基础数据类型就执行normalizeArrayChildren方法,也就是返回一个一维的数组。当然了,normalizeArrayChildren的逻辑考虑的比较多,如果数组里面有数组,就会扁平,如果是多个基础数据类型,还是创建一个新的文本VNode。

在这里插入图片描述

(3)_render 函数的返回值

vue2 项目中就是通过div的app来在页面上创建了一个文本vnode,也就是下面的new VNode 逻辑。

在这里插入图片描述
在这里插入图片描述

3.createElement 方法最终返回

createComponent方法 这个由于内容较多,会在下一篇文章中详细说明
在这里插入图片描述

总结

描述了vue2项目在render中创建一个文本vnode发生的事情,通过这个逻辑了解vnode和createElement的使用和作用。

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

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

相关文章

STM32F103的中断

文章目录 STM32F103的NVICSTM32F103 的中断优先级分组 STM32F103的NVIC CM3 内核支持 256 个中断,其中包含了 16 个内核中断和 240 个外部中断,并且具有 256级的可编程中断设置。 CM3中每个中断通道都具备自己的8位中断优先级控制字节, 但ST…

如何从Android手机上轻松恢复误删除的短信 ?

当您使用 Android 手机时,您可能会误删除一些 Android 短信。如果这些消息对您很重要,您可能想要恢复它们。在这种情况下,您可以尝试使用U1tData安卓数据恢复(奇客软件) 来完成这项工作。这篇文章将向您展示更多信息。…

dp算法训练(未完)

第一题 粉刷房子 力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台备战技术面试?力扣提供海量技术面试资源,帮助你高效提升编程技能,轻松拿下世界 IT 名企 Dream Offer。https://leetcode.cn/problems/JEj789/ class…

前段知识与基础应用

前端知识 什么是前端:所有和用户打交道的操作页面,我们都称之为前端 例如:pc页面,浏览器的主页面,手机页面等等,可以用肉眼看到的就是前端 什么是后端: 就是一堆代码,用户不能够直接…

游戏和内容创作者福音,Intel蝰蛇峡谷Nuc12SNKi7迷你主机:双十一降价来袭,从9999降至5999

引言 随着双十一购物节的到来,各大品牌纷纷推出了一系列优惠活动,其中备受关注的Intel蝰蛇峡谷Nuc12SNKi7迷你主机也迎来了降价。这款迷你主机以其独特的外观、卓越的性能以及灵活的应用场景,在市场上备受瞩目。此次双十一活动期间&#xff…

【网络协议】聊聊TCP如何做到可靠传输的

网络是不可靠的,所以在TCP协议中通过各种算法等机制保证数据传输的可靠性。生活中如何保证消息可靠传输的,那么就是采用一发一收的方式,但是这样其实效率并不高,所以通常采用的是累计确认或者累计应答。 如何实现一个靠谱的协议&…

✔ ★【备战实习(面经+项目+算法)】 10.29学习

✔ ★【备战实习(面经项目算法)】 坚持完成每天必做如何找到好工作1. 科学的学习方法(专注!效率!记忆!心流!)2. 每天认真完成必做项,踏实学习技术 认真完成每天必做&…

AD9371 官方例程HDL详解之JESD204B RX侧格式配置

AD9371 系列快速入口 AD9371ZCU102 移植到 ZCU106 : AD9371 官方例程构建及单音信号收发 采样率和各个时钟之间的关系 : AD9371 官方例程HDL详解之JESD204B TX侧时钟生成 (三) 参考资料: UltraScale Architecture G…

前端Vue框架系列—— 学习笔记总结Day03

❤ 作者主页:欢迎来到我的技术博客😎 ❀ 个人介绍:大家好,本人热衷于Java后端开发,欢迎来交流学习哦!( ̄▽ ̄)~* 🍊 如果文章对您有帮助,记得关注、点赞、收藏、…

Leetcode—274.H指数【中等】

2023每日刷题&#xff08;十三&#xff09; Leetcode—274.H指数 算法思想 参考自灵茶山艾府 实现代码 int minValue(int a, int b) {return a < b ? a : b; }int hIndex(int* citations, int citationsSize){int cnt[5001] {0};int i;for(i 0; i < citationsSize; …

pandas笔记

read_csv读取之后&#xff0c;会返回DataFrame格式的文件读取去掉头的文件 import pandas as pd df pd.read_csv(file.csv, headerNone)按列名读取某一列 pd[列名]按索引读取n列 如读取前13列所有行的值 pd.iloc[:,:13]忽略掉第一行&#xff0c;读取剩下所有行 原表格的…

GZ035 5G组网与运维赛题第6套

2023年全国职业院校技能大赛 GZ035 5G组网与运维赛项&#xff08;高职组&#xff09; 赛题第6套 一、竞赛须知 1.竞赛内容分布 竞赛模块1--5G公共网络规划部署与开通&#xff08;35分&#xff09; 子任务1&#xff1a;5G公共网络部署与调试&#xff08;15分&#xff09; …

IconWorkshop 6软件官方下载:制作ICO/ICON图标、编辑、转换图标

我们都知道在这个版本中&#xff0c;你甚至能够打开 Macintosh(R) 图标并将其转换为 Win(R) 格式。我们必须承认加强的与 Adobe(R) 和 Jasc(R) 色彩文件相兼容的色板和调色板管理系统。可以说这些功能随时都方便易用&#xff1a;内置的浏览器能够用缩略图的形式浏览文件&#x…

Leetcode周赛369补题(3 / 3)

目录 1、找出数组的K-or值 - 位运算 模拟 2、数组的最小相等和 - 分情况讨论 3、使数组变美的最小增量运算数 - 动态规划dp 1、找出数组的K-or值 - 位运算 模拟 100111. 找出数组中的 K-or 值 思路&#xff1a; 根据范围&#xff0c;我们可以枚举0~30位&#xff0c;然后在…

二叉搜索树 和 哈希表 (JAVA)

目录 二叉搜索树 二叉搜索树的插入 二叉搜索树的查找 二叉搜索树的删除 哈希表 哈希冲突 闭散列 线性探测法 二次探测法 开散列 开散列代码实现&#xff1a; 插入元素 删除元素 查找元素 二叉搜索树 先了解以下二叉搜索树是啥&#xff0c;概念如下&#xff1a…

L2-2 老板的作息表

L2-2 老板的作息表 分数 25 全屏浏览题目 切换布局 作者 陈越 单位 浙江大学 新浪微博上有人发了某老板的作息时间表&#xff0c;表示其每天 4:30 就起床了。但立刻有眼尖的网友问&#xff1a;这时间表不完整啊&#xff0c;早上九点到下午一点干啥了&#xff1f; 本题就请你…

30个前端和设计必备网站,让你的工作更轻松!

说在前面 当今互联网时代&#xff0c;前端开发和设计领域变化迅速&#xff0c;每天都会有新技术和工具不断涌现。无论你是一名前端工程师还是一名设计师&#xff0c;都需要不断了解最新的前沿技术和工具。下面是30个前端和设计经常会用到的网站&#xff0c;以及每个网站的功能介…

程序设计语言

编译解释 传参还是传值 编译原理

洛谷 B2029 大象喝水 C++代码

题目描述 AC Code #include<bits/stdc.h> using namespace std; int main() {int h,r;cin>>h>>r;double val;val3.14*r*r*h;int ans20000/val;ans;cout<<ans<<endl;return 0; }

Springmvc 讲解(1)

文章目录 前言一、SpringMvc1、简介2、核心组件和调用流程2.1 涉及组件的理解 3、小案例快速体验3.1场景需求3.1.1 导入依赖3.1.2 controller声明3.1.3 核心配置类3.1.4 环境搭建3.1.6 配置tomcat3.1.7 测试 二、SpringMvc 接收参数1.路径设置注解2、param接收参数四种类型2.1 …