当前位置: 首页 > news >正文

Vue中虚拟DOM创建到挂载的过程

Vue中虚拟DOM创建到挂载的过程

流程概括下来基本上就是:模板 → AST → render函数 → 虚拟节点 → 挂载

AST:抽象语法树,它用于记录原始代码中所有的关键信息,根据AST可以将代码从一种语言转化为另一种语言。

虚拟DOM创建到挂载

  1. 根据模板创建抽象语法树AST

    这里仅仅得到的是模板语法的原始解构,里面可能会有比如v-if,v-for这种指令。需要进一步转换。

  2. 然后进行转换

    • 解析v-if、v-for等命令
    • 有些静态内容,可以在编译时候提取出来,减少运行时的工作量
  3. 调用generate,接收抽象语法树,生成render函数

    在这里插入图片描述

  4. 执行render函数可以生成一个虚拟节点

    虚拟节点中,type代表结点类型(如:div)、props代表节点属性、children代表该节点的子结点。在这里插入图片描述

  5. 调用patch函数,将虚拟节点挂载到容器中

    • patch内部通过hostCreateElement函数(相当于document.createElement()),根据虚拟dom中的type创建对应的dom元素
    • 然后通过hostInsert函数(相当于document.insertBefore())将新创建的dom元素插入父节点中

这样就完成了从模板 → AST → render函数 → 虚拟节点的过程。

AST和虚拟DOM区别:

  • 抽象语法树(AST):模板编译阶段产物,负责将template模板转化为可执行的render函数
  • 虚拟节点(VNode):渲染阶段产物,由render函数生成,描述组件状态到DOM的映射关系

模板 → AST → render函数 → VNode树 → 真实DOM

简而言之:AST是编译阶段的代码结构解析器,VNode是运行时的动态渲染载体,二者分别在Vue的编译时和运行时发挥桥梁作用

http://www.dtcms.com/a/109165.html

相关文章:

  • Milvus 向量数据库详解:从核心概念到 Docker 部署实践
  • redis 安装
  • windows批处理命令,执行一个python文件,将命令保存为xxxx.bat文件
  • angular+form实现2048小游戏
  • 41. 评论日记
  • 2025高频面试算法总结篇【二叉树】
  • GLTF(GL Transmission Format)详细介绍
  • 多线程基础
  • 多线程交替打印ABC方法整理
  • 前端入门之CSS
  • rknn_convert的使用方法
  • WebRTC源码解析:Android如何渲染画面
  • Redis是什么?架构是怎么样的?
  • MySQL客户端工具-图形化工具-DataGrip 安装与使用
  • 《AI大模型应知应会100篇》加餐篇:LlamaIndex 与 LangChain 的无缝集成
  • 3.9/Q2,Charls最新文章解读
  • 合并两个有序数组(Java实现)
  • Vue2 过滤器 Filters
  • Blender运行python脚本?
  • 42.评论日记
  • 2874. 有序三元组中的最大值 II
  • 全星 研发项目管理APQP 软件:驱动汽车及制造业研发升级的数字化引擎
  • 【笔记】如何使得docker desktop下载至D盘而不是C盘?
  • django REST framework(DRF)教程
  • 一文读懂数据仓库:从概念到技术落地
  • 蓝桥杯Java B组省赛真题题型近6年统计分类
  • 7-5 表格输出
  • 高速电路 PCB 设计要点一
  • 2010-2020年 省级、城市数字经济创新创业-分项指数得分与排名 -社科数据
  • vue3 中引入tinymce富文本