文章目录
一、基础概念篇
1. Vue3响应式原理(必考知识点!)
使用Proxy替代了Vue2的Object.defineProperty实现响应式。举个🌰:
const reactiveData = reactive({ count: 0 })
// 当修改count时自动触发更新
优势对比:
- 支持数组下标修改(Vue2做不到的!)
- 对象新增属性自动响应
- 性能提升约30%(实测数据)
2. Composition API vs Options API
(敲黑板)重点理解setup函数:
setup() {
const count = ref(0)
const double = computed(() => count.value * 2)
function increment() {
count.value++
}
return { count, double, increment }
}
优势场景:
- 大型项目代码组织更灵活
- 逻辑复用更方便(终于告别mixins!)
- TypeScript支持更友好
3. Teleport组件实战技巧
把模态框渲染到body层的神器:
<teleport to="body">
<div class="modal">...</div>
</teleport>
使用场景:
- 全局通知弹窗
- 全屏Loading动画
- 需要突破父级overflow限制的情况
二、进阶优化篇
4. 性能优化三大杀器
- 静态节点提升(Compiler优化)
- 事件侦听缓存(减少重复绑定)
- 按需引入特性(比如keep-alive)
5. 自定义Hooks开发
自己造轮子才显水平!比如实现防抖Hook:
export function useDebounce(fn: Function, delay = 300) {
let timer: number
return (...args: any[]) => {
clearTimeout(timer)
timer = setTimeout(() => fn(...args), delay)
}
}
6. 服务端渲染(SSR)避坑指南
常见问题:
- 客户端激活失败(hydration错误)
- 全局变量污染(用Nuxt更省心)
- 异步数据处理(慎用setTimeout!)
三、原理剖析篇
7. Diff算法升级点
新增的快速路径优化:
- 静态节点跳过比对
- 最长递增子序列优化移动操作
- 位运算标记节点类型
8. 编译时优化黑科技
看个编译前后的对比:
<!-- 原始模板 -->
<div>{{ msg }}</div>
<!-- 编译后 -->
const _hoisted_1 = /*#__PURE__*/_createVNode("div", null, _toDisplayString(msg), 1 /* TEXT */)
优化点:
- 静态节点提前创建
- 动态标记精准更新
- 缓存事件处理函数
四、实战场景篇
9. 权限控制方案
推荐RBAC模型实现:
// 指令方式
app.directive('permission', {
mounted(el, binding) {
if (!checkPermission(binding.value)) {
el.parentNode?.removeChild(el)
}
}
})
10. 跨组件通信方案
根据场景选择:
- props/emit(父子组件)
- provide/inject(跨层级)
- vuex/pinia(全局状态)
- eventBus(小型项目)
五、高频陷阱题
11. 为什么v-for要加key?
(必问!)key的作用:
- 精准定位节点
- 重用已有元素
- 避免渲染错误
错误示范:
<div v-for="item in list">{{ item }}</div>
12. nextTick原理及应用
事件循环中的微任务:
await nextTick()
// DOM已更新
实现原理:
- Promise > MutationObserver > setTimeout
六、TypeScript整合
13. 类型声明技巧
泛型组件示例:
interface Props<T> {
data: T[]
}
defineComponent({
props: {
data: {
type: Array as PropType<T[]>,
required: true
}
}
})
最后叮嘱
面试前必做的三件事:
- 亲手实现一个自定义Hook(面试官最爱问)
- 准备一个性能优化案例(要有数据对比)
- 理解Vue3源码结构(至少看过响应式模块)
切记:框架只是工具,展示你的工程化思维和解决问题能力才是关键!遇到不会的问题不要慌,大方承认并展示学习能力,反而可能加分哦~