【vue高频面试题】第一题:Vue 3 相比 Vue 2,有哪些重大变化?

Vue 3 与 Vue 2 关键差异与高频面试要点

面向"面试与复习"的精炼笔记,已去除重复内容并规范为 Markdown。围绕响应式、组合式 API、性能与体积、TypeScript 支持,以及新特性(Teleport、Suspense、多根节点、自定义渲染器)进行归纳,并提供可直接复用的示例代码。

核心差异速览

  • 响应式系统:Vue 3 采用 Proxy 替代 Vue 2 的 Object.defineProperty
  • 组合式 API:setuprefreactivecomputed 等,逻辑复用更自然,适合大型项目。
  • 性能与体积:编译期与运行时优化更深入,Tree-shaking 更彻底,包体更小。
  • TypeScript 支持:以 TS 重写,类型推断更强,开发体验提升明显。
  • 新特性:TeleportSuspense、多根节点支持,自定义渲染器能力更强。

响应式系统

  • 为什么使用 Proxy
    • 原生支持属性的新增/删除监听,无需 Vue.set
    • 更好支持数组索引与 length 变化。
    • 更符合现代语言特性,性能与可维护性更优。
  • refreactive 的取舍:
    • ref 适合基本类型或需要单独引用的值,访问需使用 .value
    • reactive 适合对象/数组整体响应式代理,直接解构可能丢失响应需谨慎。

组合式 API(Composition API)

  • 优势:高内聚的逻辑复用、可抽取为 composables,跨文件共享更顺畅;对复杂业务与大型组件更友好。
  • 与 Options API 共存:简单组件仍可用 Options;复杂场景优先 Composition。
  • 与 TypeScript 的协作:类型系统更完善,ref<T>/reactive<T> 泛型增强开发体验。

示例:

ts 复制代码
import { ref, computed } from 'vue';

export default {
  setup() {
    const count = ref(0);
    const double = computed(() => count.value * 2);
    const increment = () => count.value++;
    return { count, double, increment };
  }
}

性能与体积优化

  • 编译器优化:静态节点提升、事件绑定优化,减少运行时负担。
  • 虚拟 DOM 改进:更高效的 diff 与 patch 策略。
  • Tree-shaking:未使用的 API(如 Teleport)不会进入最终包体。

TypeScript 支持

  • 框架以 TypeScript 重写:类型定义更完善、推断更准确。
  • Props 与组件类型推断更强,减少样板代码与类型声明负担。

示例:

ts 复制代码
import { ref } from 'vue';
const count = ref<number>(0);

新内置组件与特性

  • Teleport:将子组件渲染到指定的 DOM 容器,适用于弹窗/浮层等全局层级内容。
vue 复制代码
<template>
  <Teleport to="#modal">
    <div class="modal">这是弹窗内容</div>
  </Teleport>
  <div id="modal"></div>
  <button @click="open = true">打开</button>
</template>

<script setup lang="ts">
import { ref } from 'vue';
const open = ref(false);
</script>
  • Suspense:为异步组件提供占位与完成态切换,优化加载体验。
vue 复制代码
<template>
  <Suspense>
    <template #default>
      <AsyncView />
    </template>
    <template #fallback>
      <div>加载中...</div>
    </template>
  </Suspense>
</template>

<script setup>
import { defineAsyncComponent } from 'vue'
const AsyncView = defineAsyncComponent(() => import('./AsyncView.vue'))
</script>
  • 多根节点支持:组件模板不再强制单根,结构更简洁,避免多余包裹。
  • 自定义渲染器:扩展到非 DOM 场景(原生、Canvas 等)。

高频追问与要点速答

  • 为什么 Proxy 更优?支持属性新增/删除与数组细粒度监听,API 更现代。
  • ref / reactive 如何选择?值与基本类型用 ref,对象/数组整体用 reactive
  • Composition API 的优势?逻辑复用、模块化、与 TS 协同更好,适合复杂业务。
  • 编译与性能优化体现?静态提升、事件优化、Tree-shaking,更小更快。
  • Teleport/Suspense 的场景?弹窗、全局浮层与异步加载占位。
  • 多根节点的好处?更简洁的结构,减少无意义包裹。

总结

Vue 3 在响应式、API 设计、性能与类型系统方面全面升级。掌握核心差异与常用场景(弹窗、异步组件、类型推断),再结合可落地的示例代码,基本可以覆盖多数面试与复盘问答。

相关推荐
css趣多多9 分钟前
ctx 上下文对象控制新增 / 编辑表单显示隐藏的逻辑
前端
_codemonster16 分钟前
Vue的三种使用方式对比
前端·javascript·vue.js
寻找奶酪的mouse17 分钟前
30岁技术人对职业和生活的思考
前端·后端·年终总结
梦想很大很大24 分钟前
使用 Go + Gin + Fx 构建工程化后端服务模板(gin-app 实践)
前端·后端·go
We་ct26 分钟前
LeetCode 56. 合并区间:区间重叠问题的核心解法与代码解析
前端·算法·leetcode·typescript
张3蜂33 分钟前
深入理解 Python 的 frozenset:为什么要有“不可变集合”?
前端·python·spring
无小道34 分钟前
Qt——事件简单介绍
开发语言·前端·qt
广州华水科技36 分钟前
GNSS与单北斗变形监测技术的应用现状分析与未来发展方向
前端
code_YuJun1 小时前
corepack 作用
前端
千寻girling1 小时前
Koa.js 教程 | 一份不可多得的 Node.js 的 Web 框架 Koa.js 教程
前端·后端·面试