Vue 基础面试题, Vue 实例在挂载过程中发生了什么?
Vue 基础面试题, Vue 实例在挂载过程中发生了什么?
QA
Step 1
Q:: Vue 实例在挂载过程中发生了什么?
A:: 当 Vue 实例被创建时,Vue 会执行以下步骤:1. 初始化生命周期、事件、props、data、computed 和 watch 等。2. 检查并解析模板或者 render 函数。3.
在 beforeMount
钩子调用之后,实例会尝试挂载到 el
属性指定的 DOM 元素上,并在此过程中创建一个渲染函数(Render Function)。4. 生成虚拟 DOM 并进行首次渲染。5.
在 mounted
钩子执行后,实例已被完全挂载,并可以响应数据的变化。
Step 2
Q:: Vue 生命周期的各个钩子函数的作用是什么?
A:: Vue 生命周期钩子函数包括 beforeCreate
、created
、beforeMount
、mounted
、beforeUpdate
、updated
、beforeDestroy
和 destroyed
。它们分别在 Vue 实例的不同生命周期阶段执行,允许开发者在实例初始化、渲染、更新和销毁时执行自定义逻辑。
Step 3
Q:: 什么是虚拟 DOM,Vue 是如何使用它的?
A:: 虚拟 DOM 是对实际 DOM 的抽象表示。Vue 在渲染组件时,会先创建虚拟 DOM(VNodes),然后通过对比新旧虚拟 DOM(即 diff 算法)来决定最小化更新到真实 DOM 的操作。这样可以提高性能,避免不必要的 DOM 操作。
Step 4
Q:: 在 Vue 中,如何进行组件间通信?
A:: 在 Vue 中,常见的组件通信方式有以下几种:1.
props
:父组件向子组件传递数据。2.
$emit
:子组件向父组件发送事件。3.
EventBus
:使用一个空的 Vue 实例充当事件总线,在任意组件间传递事件。4.
Vuex:用于跨组件甚至跨页面的状态管理。
Step 5
Q:: Vue 的响应式系统是如何实现的?
A:: Vue 的响应式系统通过使用 ES5
的 Object.defineProperty
或 ES6
的 Proxy
(在 Vue 3
中)实现。Vue 会对数据对象的属性进行劫持,当属性被读取时,会记录依赖(Watcher);当属性被修改时,会通知所有依赖进行更新。