04-Vue3.0源码阅读之挂载

238 阅读2分钟

「这是我参与2022首次更文挑战的第13天,活动详情查看:2022首次更文挑战」。

前言

我们前面小试牛刀,试着从创建开始,断点进入源码来阅读Vue3.0究竟做了些什么,并且了解了createApp所实现的方法,下面我们要顺着createApp之后的mount继续下去,来看看我们实现一个新的Vue实例并且挂载究竟做了什么。

挂载过程

挂载在Vue代码中是,app.mount('#app'),我们进入刚才的createAppAPI中找到mount方法继续深入(这部分代码并不是很长,图贴在下面):

image.png

创建的时候创建了一个vnode;

如果不是hydrate类型,则运行render方法,此render方法即是传入进来的render,顾名思义用于渲染。

我们接下来可以继续进行单步调试,鼠标放在运行时候的render方法上面,会看见有一个小弹框,具体图像在下面,我们可以用之来跳转到对应的文件:

image.png

进入文件之后我们可以看到,render方法并不复杂,如下图所示。

image.png

这部分的目是将虚拟dom转换为真实dom,运行的时候如果已经存在了节点,则会走patch方法,patch方法的目的就是我们刚才讲的将虚拟dom转换为真实dom,将其内容放在宿主元素,即container参数中。

因此上面整个的流程的意义实际上是,在createApp中创建虚拟DOM,.mount的时候将虚拟DOM转换为真实DOM并放入“#app”元素中。

延伸出来,我们经常听见patch算法,Vue中的patch优化实现之类的前辈总结,那个patch就是我们刚刚顺着流程看下来的patch的方法,后面我们将继续进行深入。

查看调用栈

上面我们使用的调试方法是单步调试法,从上往下依次类推,下面我们还可以使用的另一种快速阅读的方法就是查看调用栈法,还是之前的创建代码,我们将断点打在apiCreateApp中的283行,如下图所示

image.png

我们就可以在右边调用堆栈中查看所有的调用栈信息,整个流程就可以根据流程来查看。