vue的模板渲染和更新过程

本文深入探讨Vue的渲染过程,包括模板编译成render函数、响应式系统的Object.defineProperty()、数据变化时的setter触发及Diff算法在更新DOM中的应用。通过理解这些核心概念,可以更好地掌握Vue框架的工作机制。
摘要由CSDN通过智能技术生成

在这里插入图片描述

  1. 解析模板为 render 函数

这部分是说vue 编译相关,也就是说把 vue 语法编译 成 js 语法,通过执行 vue-template-compiler 的 compiler 函数,得到 render

  1. 触发响应式

响应式关键 Object.defineProperty(),将模版初次渲染使用到的变量绑定到 Object.defineProperty() 中,首次渲染会 触发 getter

  1. 执行render 函数

第一点说到已经得到render函数,现在要执行render函数, 将 vue 语法转成 h 函数的结果,也就是 vNode,后续进行一系列操作

在这里插入图片描述
在这里插入图片描述
render函数,此时模板已经编译完了,然后再生成一个vNode,执行函数的时候会触发Data里面的getter,触发的时候就会收集依赖,触发哪个就会watcher观察起来,修改Data的时候,就会触发setter,看修改的data是不是之前被观察起来的,如果是就重新re-render,重新渲染,生成newVnode。patch

另一种图
在这里插入图片描述
首先new Vue()之后会进入初始化阶段,初始化的东西有很多,如我们的常见的生命周期,事件,属性与状态,计算属性与watch,并实现数据的响应式。

初始化完成之后就是挂载阶段,如果是使用template模板并且处于运行时编译的状态,那么会进行编译阶段。

编译阶段由parse, optimize, generate组成,分别用来解析模板语法并生成AST,标记静态节点以优化,将AST转化为render function string的过程,这样就准备完成了渲染VNode所需的render function。

更新阶段主要由响应式支撑,当render function string时,因为会读取所需对象,会触发getter函数(2或3)进行依赖收集,随后修改对象时,setter会通知之前依赖收集的每一个watcher,让他们调用update来更新视图。

再回到render function string那一步,它最终会转化为VNode并再度生成真实DOM Node,而响应式更新后会通过patch比较,使用Diff算法统一将更新打包到真实的DOM Tree上。

这样就走完了整个Vue的流程。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

老电影故事

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值