Vue.js 是一套用于构建用户界面的渐进式 JavaScript 框架,因其简单易用、性能优异而广受开发者喜爱。在前端面试中,Vue 2 是一个高频考点。本文将为你梳理 Vue 2 的核心知识点,帮助你高效备战面试。
1. Vue 2 的核心概念
1.1 响应式原理
Vue 2 的响应式系统是其核心特性之一,通过 Object.defineProperty
实现数据劫持。
-
数据劫持:Vue 会遍历 data 对象的属性,将其转换为 getter/setter。
-
依赖收集:在 getter 中收集依赖(Watcher),在 setter 中通知依赖更新。
-
数组处理:Vue 重写了数组的 7 个方法(如
push
、pop
、splice
等)来实现响应式。
1.2 生命周期钩子
Vue 2 的生命周期钩子是面试中的高频考点,以下是常见的生命周期钩子:
-
beforeCreate:实例初始化之后,数据观测和事件配置之前。
-
created:实例创建完成,数据观测和事件配置完成。
-
beforeMount:模板编译完成,但尚未挂载到 DOM。
-
mounted:实例挂载到 DOM 后调用。
-
beforeUpdate:数据更新时,DOM 重新渲染之前。
-
updated:数据更新后,DOM 重新渲染完成。
-
beforeDestroy:实例销毁之前。
-
destroyed:实例销毁后。
2. 模板语法与指令
2.1 插值
-
文本插值:
{{ message }}
-
原始 HTML:
v-html="rawHtml"
2.2 指令
-
v-bind:动态绑定属性,如
v-bind:class
、v-bind:style
。 -
v-model:实现表单元素的双向绑定。
-
v-if / v-else / v-show:条件渲染。
-
v-if
:条件为真时渲染元素,否则销毁。 -
v-show
:条件为真时显示元素,否则隐藏(通过display: none
)。
-
-
v-for:列表渲染,如
v-for="(item, index) in items"
。 -
v-on:绑定事件监听器,如
v-on:click="handleClick"
。
3. 组件化开发
3.1 组件通信
-
父子组件通信:
-
父组件通过
props
向子组件传递数据。 -
子组件通过
$emit
触发事件,父组件通过v-on
监听事件。
-
-
兄弟组件通信:
-
使用事件总线(Event Bus):创建一个空的 Vue 实例作为事件中心。
-
使用 Vuex 状态管理。
-
-
跨级组件通信:
-
使用
provide/inject
。
-
3.2 插槽(Slot)
-
默认插槽:
<slot></slot>
-
具名插槽:
<slot name="header"></slot>
-
作用域插槽:
<slot :user="user"></slot>
4. Vuex 状态管理
4.1 核心概念
-
State:存储应用的状态数据。
-
Getter:从 State 中派生出一些状态,类似于计算属性。
-
Mutation:同步修改 State 的唯一方式。
-
Action:提交 Mutation,可以包含异步操作。
-
Module:将 Store 分割成模块,每个模块拥有自己的 State、Getter、Mutation 和 Action。
4.2 使用场景
-
多个组件共享状态。
-
需要记录状态变化的历史。
-
需要跨组件通信。
5. Vue Router 路由管理
5.1 核心概念
-
路由配置:通过
routes
数组定义路由规则。 -
动态路由:如
/user/:id
。 -
嵌套路由:在路由配置中使用
children
属性。 -
导航守卫:
-
全局守卫:
beforeEach
、afterEach
。 -
路由独享守卫:
beforeEnter
。 -
组件内守卫:
beforeRouteEnter
、beforeRouteUpdate
、beforeRouteLeave
。
-
5.2 使用场景
-
实现单页面应用(SPA)。
-
根据 URL 动态加载组件。
6. 性能优化
6.1 组件懒加载
7. 常见面试题
7.1 Vue 2 的响应式原理是什么?
7.2 Vue 2 和 Vue 3 的区别?
7.3 Vuex 的作用是什么?
7.4 如何实现组件懒加载?
8. 总结
Vue 2 是前端面试中的高频考点,掌握其核心概念和常见用法是面试成功的关键。本文从响应式原理、生命周期、组件化开发、Vuex、Vue Router 等方面进行了全面梳理,并提供了常见面试题,帮助你高效备战面试。
如果你对某个知识点有疑问,欢迎在评论区留言讨论!祝你在面试中脱颖而出!🚀
延伸阅读:
-
使用
import()
动态加载组件。 -
示例:
const Home = () => import('./components/Home.vue');
6.2 虚拟列表
-
对于长列表,只渲染可见区域的内容,减少 DOM 操作。
-
6.3 使用
v-if
和v-show
的区别 -
v-if
:适合条件变化较少的场景。 -
v-show
:适合频繁切换显示/隐藏的场景。 -
通过
Object.defineProperty
实现数据劫持,结合 Watcher 和 Dep 实现依赖收集和派发更新。 -
Vue 3 使用
Proxy
替代Object.defineProperty
,性能更好。 -
Vue 3 支持 Composition API,代码组织更灵活。
-
Vuex 是 Vue 的状态管理工具,用于集中管理应用的状态。
-
使用
import()
动态加载组件。