35 道常见前端 Vue 面试题详解
前端开发中,HTML、CSS 和 JavaScript 是基石,但随着技术发展,MVVM 框架已成为主流。本文梳理了 Vue 及全家桶的常见面试考点,涵盖原理、实战与性能优化。
1. MVVM 模式理解
MVVM 是 Model-View-ViewModel 的缩写。它将数据模型与视图层通过数据驱动分离,开发者只需关注数据模型的开发,无需手动操作 DOM。
- Model:数据模型,定义业务逻辑和数据。
- View:页面展示组件(DOM),负责将数据渲染为 UI。
- ViewModel:连接 Model 和 View 的桥梁。监听数据变化并控制视图行为,处理用户交互。通过双向数据绑定,View 和 Model 之间的同步完全自动。
在 MVVM 架构下,View 和 Model 无直接联系,而是通过 ViewModel 交互。Model 变化会立即反应到 View,View 的变化也会同步到 Model。
2. Vue 生命周期及理解
Vue 实例的生命周期分为 8 个阶段,对应 4 个主要时期:创建、挂载、更新、销毁。
创建前/后
- beforeCreate:实例初始化之后,数据观测 (data observer) 和事件配置之前。此时
data和methods均未初始化。 - created:实例已完成数据观测、属性和方法的运算,但 DOM 尚未生成。这是操作
data和调用methods的最佳时机。
载入前/后
- beforeMount:模板编译完成,但尚未挂载到 DOM。此时
el还是虚拟节点。 - mounted:实例已挂载,DOM 已替换。可以在此阶段操作真实 DOM 或发起异步请求。
更新前/后
- beforeUpdate:数据变化时触发,此时 DOM 仍是旧状态,数据已是新状态。
- updated:DOM 更新完成,视图与数据保持同步。避免在此处修改数据以防死循环。
销毁前/后
- beforeDestroy:实例销毁前调用,此时实例仍可用,适合清理定时器或解绑事件。
- destroyed:实例销毁后调用,所有指令解除绑定,事件监听移除,DOM 结构依然存在但不可访问。
3. v-if 和 v-show 的区别
两者都能控制元素显示隐藏,但实现机制不同:
- v-show:本质是通过 CSS 的
display: none控制隐藏。元素始终存在于 DOM 中,只编译一次。适合频繁切换的场景。 - v-if:动态向 DOM 树添加或删除元素。初始值为 false 时不编译。适合条件不常改变的场景,因为切换开销较大。
4. v-if 和 v-for 同时使用
当两者在同一标签上使用时,v-for 优先级高于 v-if。这意味着 v-if 会在每次循环中执行。这会导致性能浪费,因此不推荐混用。若必须使用,建议将 v-if 移到外层容器上。
5. v-for 中的 key 理解
key 用于给每个节点做唯一标识,帮助 Diff 算法高效识别节点。使用 key 可以避免因顺序调整导致的重复渲染或状态丢失,确保虚拟 DOM 更新效率。


