当面试官问我们vue实例挂载的过程的时候,一脸懵逼???? what ?? 写代码要会这个吗? 有时候理论基础才能决定高度
1.new vue() 这个过程发生了什么?
Vue实例的挂载过程是Vue应用从初始化到最终渲染到页面上的一个过程,主要涉及到Vue实例的创建、编译模板、创建虚拟DOM、渲染和更新DOM等步骤。这个过程大致可以分为以下几个关键步骤:
-
创建Vue实例:首先,通过
new Vue()来创建一个Vue实例。在这一步中,可以传入一个选项对象,该对象包括数据、模板、挂载元素、方法、生命周期钩子等属性。 -
初始化实例属性和方法:Vue实例在创建时,会对选项对象中的数据、方法、计算属性、监控等进行初始化。
-
模板编译:如果Vue实例在创建时指定了
template选项,或者指定了el选项且对应的DOM元素中有HTML内容,这些HTML将会被编译成渲染函数。编译过程中,Vue会将模板中的指令、插值、绑定等编译成虚拟DOM渲染函数。 -
挂载实例:通过调用
$mount方法,Vue实例开始挂载。如果在创建实例时已经指定了el选项,Vue会自动调用$mount。在挂载过程中,Vue会执行beforeMount生命周期钩子。 -
创建虚拟DOM:Vue使用渲染函数生成虚拟DOM。渲染函数基于实例的状态来生成虚拟节点(VNodes)。
-
生成真实DOM:Vue将虚拟DOM转换为真实DOM元素,并插入到挂载点(即
el选项指定的DOM元素)中。在这一步之前,会执行beforeCreate和created生命周期钩子,在这一步之后,会执行mounted生命周期钩子。 -
DOM更新与重渲染:当Vue实例的状态改变时,Vue会重新执行渲染函数来生成新的虚拟DOM,并通过虚拟DOM的对比算法(diff算法),高效地更新只有变化部分的真实DOM。
整个过程是一个自上而下,由内而外的初始化和渲染过程,Vue的响应式系统会确保当数据变化时视图能够自动更新。这个过程中,Vue提供了多个生命周期钩子函数,允许用户在不同阶段加入自己的代码逻辑。