Vue 面试核心知识点详解与答题策略
一、Vue 核心概念与原理
-
响应式数据绑定原理
Vue 2.x 使用Object.defineProperty
劫持数据属性的 getter/setter,结合发布-订阅模式(依赖收集器 Dep 和观察者 Watcher)实现数据变化自动更新视图。
Vue 3.x 改用 Proxy API,直接代理整个对象,解决了 Vue 2 中数组索引修改、对象属性增删无法监听的缺陷,性能更高且支持动态新增属性。 -
生命周期钩子函数
关键钩子执行顺序与场景:-
beforeCreate
:实例初始化,数据观测未开始。 -
created
:数据观测完成,可访问 data/computed,但 DOM 未生成(适合异步请求)。 -
mounted
:DOM 已挂载,可操作 DOM 或访问$refs
。 -
beforeUpdate
/updated
:数据更新前后触发。 -
beforeDestroy
/destroyed
:实例销毁前清理定时器、解绑事件。
-
-
指令与模板语法
-
v-if
vsv-show
:
v-if
是条件渲染(动态增删 DOM),v-show
是 CSS 切换(display: none
),频繁切换用v-show
。 -
v-for
必须加 key
:用于 VDOM Diff 算法高效复用节点(避免用index
,推荐唯一 ID)。 -
v-model
:语法糖,等价于:value + @input
,支持自定义组件双向绑定。
-
二、组件化开发进阶
-
组件通信方式
方式 适用场景 示例 Props/Events 父子组件 父传子: <child :data="parentData">
,子触发this.$emit('event')
58Event Bus 任意组件 const bus = new Vue()
,bus.$on/ $emit
410Vuex 跨层级共享状态 集中式状态管理(见下文) Provide/Inject 祖先→子孙 祖先 provide: { data }
,子孙inject: ['data']
10 -
高级组件技术
-
插槽(Slots):
-
默认插槽:
<slot>
接收父组件内容。 -
具名插槽:
<slot name="header">
+<template v-slot:header>
。
-
-
异步组件:
const Foo = () => import('./Foo.vue') // 路由懒加载或按需加载
-
动态组件:
<component :is="currentComponent"></component> <!-- 配合 keep-alive 缓存状态 -->
-
三、路由与状态管理
-
Vue Router 核心
-
路由守卫:
-
全局守卫:
router.beforeEach((to, from, next) => {})
(适合权限校验)。 -
组件内守卫:
beforeRouteEnter
(无法访问this
,可用next(vm => {})
回调)。
-
-
路由传参:
-
动态路由:
path: '/user/:id'
→this.$route.params.id
。 -
Query 参数:
/user?id=123
→this.$route.query.id
。
-
-
-
Vuex 状态管理
-
核心概念:
const store = new Vuex.Store({ state: { count: 0 }, mutations: { increment(state) { state.count++ } }, // 同步修改 actions: { asyncIncrement({ commit }) { setTimeout(() => commit('increment'), 1000) } }, // 异步操作 getters: { doubleCount: state => state.count * 2 } // 计算属性 })
-
为何 Mutation 必须同步?
确保状态变更可被 DevTools 追踪,异步操作需通过 Action 提交 Mutation。
-
四、性能优化与最佳实践
-
性能优化策略
-
代码分割:路由懒加载(
() => import('./Component.vue')
)。 -
缓存组件:
<keep-alive>
包裹动态组件,减少重复渲染。 -
计算属性缓存:
computed
依赖不变时复用结果(比methods
高效)。 -
避免 v-if 和 v-for 共用:Vue 优先执行
v-for
,导致不必要的循环(可改用计算属性过滤数据)。
-
-
错误处理
-
全局捕获:
Vue.config.errorHandler = (err, vm, info) => { /* 上报错误 */ }
。 -
组件内捕获:
errorCaptured
钩子捕获子孙组件错误。
-
五、Vue 3 新特性剖析
-
Composition API vs Options API
-
Options API:按选项(data、methods)组织代码,简单但逻辑分散。
-
Composition API:基于函数(
setup()
)按逻辑功能组织代码,支持复用(类似 React Hooks)。setup() { const count = ref(0); const double = computed(() => count.value * 2); return { count, double }; }
-
-
其他重大改进
-
Teleport:将组件渲染到 DOM 任意位置(如模态框)。
-
Fragments:支持多根节点模板。
-
Tree-shaking 优化:未使用模块不打包进生产代码。
-
结语
掌握 Vue 不仅要熟记 API,更要深入其设计思想(如响应式、组件化)。面试时建议结合项目经验,如:“我在电商项目中用 Vuex 管理购物车状态,通过 Mutation 保证数据变更可追踪”。同时关注 Vue 3 生态迁移趋势,理解底层原理(如 Virtual DOM Diff)能显著提升回答深度。