当前位置: 首页 > 网络应用技术

VUE3和原始分析的手动实现(3) - 渲染器渲染器渲染&& patch比较更新

时间:2023-03-05 18:24:26 网络应用技术

  该分析是指尽可能多地记录我的VUE3源阅读学习过程的VUE3源代码,Cui da的迷你VUE和HUO CHUNYANG的“ VUEJS设计和实施”。并附加到每篇文章的底部。我希望每个人都可以在我的文章中一起学习并共同取得进步。那些能够鼓励作者的人吗?谢谢大家!

  让我们从渲染和渲染器之间的区别开始

  许多人会混淆两者,我们还制作了一些名词,这些名词将通过提前发表预状态陈述来谈论

  让我们通过代码描述他们的粗糙关系之一:

  以上代码用于创建渲染器。调用此函数将获得一个,渲染函数和渲染函数的内部。

  为什么您有更多的杂物来收拾一层?为什么不直接定义渲染函数?

  然后提出问题,看不起它

  实际上,渲染器的作用不仅与返回渲染函数一样简单,还包含一些补丁(更多新节点,更新),水合

  在VUE3中,除了返回最后提到的渲染和水合物外,CreateNERER函数还将返回一个称为CreateApp的函数

  实际上,我们看到这个createApp实际上是一种造物菌,必须传递到渲染中,内部。氢是我们的选择。我不会说。如果有服务器渲染,我们将再次讨论。

  然后,让我们强调渲染器渲染器的角色,也就是说,他支持个性化配置功能以实现交叉平台。

  在代码中,Createndereger接收一个选项参数,然后使用解构来获取相应的操作

  Createnderer实际上包含许多处理功能。有关详细信息,让我们看以下图片

  一开始,渲染函数还看到它实际上是在调用补丁。补丁用于确定第一次确定真实DOM或比较新的和旧节点以找到更新的更改点。

  此外,渲染功能仍然负责

  简单,我们可以认为渲染函数的实现如下:

  通常,在VUE3中,渲染函数的更复杂的逻辑实际上移交给了补丁。它只是用作调用patch的中间功能。注意渲染已退出,这意味着我们可以通过

  来直接称呼它

  它也用于createAppapi-> mount-> createvinde + render()

  渲染之间的关系如下:

  关于补丁的特定接收参数

  此外,卸载上面容器的方法并不严格,因为:::

  正确的操作应为,然后使用本机DOM操作方法删除DOM元素。因此,我们给它,让Vnode与真实的DOM连接,并在卸载时。

  我们使用代码来解释本段:

  我们上面提到,也就是说,不要认为它只能在浏览器中渲染。

  实际上,我们可以使用渲染器渲染器来实现自己的自定义渲染。在这里,我们为印刷渲染器的操作过程演示了一个自定义渲染设备:

  尝试使用CODESANDBOX

  在VUE3中,ShapeFlag的机制特别有趣,我们稍后将讨论它。

  这是本章的关键功能,贴片功能再次强调其角色:

  主要接收参数如下:

  ShapeFlags是VUE3。

  文件的位置在中间

  详细信息如下:

  我们可以看到,实际上我们使用枚举来识别不同的类型,并使用位操作员将1个左位n位置做出。

  这意味着元素。它的值为1。1我们仍然可以看到子元素是文本类型,其值为1 << 3 = 1000(两个-in -system)= 8

  然后,元素的子元素是文本类型,可以表示为1001(2nd in -production)= 9

  判断位运算符时,您可以知道当前元素是否具有相应类型,例如:

  在VUE3中,您使用此判断来知道该虚拟节点是否具有一种或多种类型。

  那么,Vnode如何计算其ShapeFlag?

  当CreateVnode时,实际上将有一个初始操作来判断当前VNode的基本类型。细节如下:

  那么您可以获得这五种基本类型之一

  然后,它将进一步根据当前Vnode的孩子确定儿童的类型,并通过位计算符号合并,例如:

  例如,当前的儿童类型是vnode的基本类型,因此基于枚举,我们可以知道其ShapeFlag最终是1001 = 9