Vue.js 面试题解析与解答
1. Vue 生命周期
问题: 描述 Vue 实例的生命周期,并在每个阶段简述可以进行的操作。
解答: Vue 实例的生命周期包含创建、挂载、更新、销毁四个阶段,每个阶段都对应着特定的钩子函数。
- 创建阶段:
beforeCreate
:实例初始化之前,数据观测和事件机制尚未建立。created
:实例创建完成,可以访问数据,进行数据请求等操作。
- 挂载阶段:
beforeMount
:虚拟 DOM 已经创建,但尚未挂载到页面。mounted
:实例已挂载到页面,可以操作 DOM 元素。
- 更新阶段:
beforeUpdate
:数据更新时调用,虚拟 DOM 重新渲染之前。updated
:虚拟 DOM 重新渲染并更新到页面之后。
- 销毁阶段:
beforeDestroy
:实例销毁之前调用,可以进行一些清理工作。destroyed
:实例销毁之后调用,Vue 实例的所有东西都会被解绑。
2. 双向数据绑定
问题: 解释 Vue 中的双向数据绑定原理。
解答: Vue 的双向数据绑定是通过数据劫持和发布订阅模式实现的。
- 数据劫持: 使用
Object.defineProperty()
方法监听数据对象的属性变化,当属性值发生改变时触发setter
,通知订阅者更新。 - 发布订阅模式: Vue 内部维护一个订阅者列表,当数据发生变化时,通知所有订阅者更新视图。
3. 组件通信
问题: 描述 Vue 组件之间常用的通信方式。
解答: Vue 组件之间常用的通信方式包括:
- Props 传递数据: 父组件通过属性将数据传递给子组件。
- Events 发送事件: 子组件通过
$emit
方法触发自定义事件,父组件监听该事件并进行处理。 - Vuex 状态管理: 适用于大型应用,通过集中式存储管理应用的所有组件的状态。
- Provide/Inject: 允许祖先组件向其所有子孙组件注入依赖,无论组件层次结构有多深。
- $attrs/$listeners: 用于多层级组件嵌套场景,传递属性和事件监听器。
4. 计算属性和侦听器
问题: 说明计算属性和侦听器的区别,并举例说明其应用场景。
解答:
- 计算属性: 基于响应式依赖进行缓存,只有在依赖发生变化时才会重新计算,适用于需要对数据进行复杂处理并缓存结果的场景。
- 侦听器: 当需要监听某个数据变化并执行异步操作或较大开销的操作时使用。
示例:
商品总价:{{
totalPrice }}
export default {
data() {
return {
quantity: 1,
price: 10
};
},
computed: {
totalPrice() {
return this.quantity * this.price;
}
},
watch: {
quantity(newVal) {
// 监听数量变化,进行异步请求更新库存等操作
}
}
};
5. 虚拟 DOM
问题: 解释虚拟 DOM 的概念以及它在 Vue 中的作用。
解答: 虚拟 DOM 是真实 DOM 的 JavaScript 对象表示,Vue 使用虚拟 DOM 进行 diff 算法比较,找出差异部分进行 targeted update,从而提高页面渲染效率。
暂无评论