【vue高频面试题】第6题:Vue3 中 Composition API 和 Options API 有什么区别?为什么 Composition API 更推荐

问:Vue3 中 Composition API 和 Options API 有什么区别?为什么 Composition API 更推荐?


一、标准回答(面试官期望你说到的点)

1)代码组织方式不同

Options API

按选项组织(data、methods、computed、watch...),逻辑分散。

javascript 复制代码
export default {
  data() { return { count: 0 }},
  methods: { add() { this.count++ }},
  watch: { count() {} }
}

Composition API

按业务逻辑组织(功能函数 + 组合逻辑),逻辑集中。

xml 复制代码
<script setup>
import { ref } from 'vue'

const count = ref(0)
function add() { count.value++ }
</script>

结论:Composition API 更适合大项目、复杂逻辑复用。


2)逻辑复用方式不同

Options API

依赖 mixins,但有问题:

  • 变量来源不清晰(冲突)
  • 多个 mixin 很容易不知道数据从哪里来

Composition API

复用逻辑靠 Composable(封装函数)

javascript 复制代码
// useCounter.js
export function useCounter() {
  const count = ref(0)
  const inc = () => count.value++
  return { count, inc }
}

业务代码变得更清晰。


3)类型支持更好(TS 体验)

Composition API 是天然为 TypeScript 设计的,

Options API 兼容不友好。


4)Tree-shaking 能力更强

Composition API 使用纯函数 + ES 模块

→ 未用到的代码可以被摇树优化

→ 构建体积更小(Vue3 最初的核心目的之一)


5)可读性在大型项目更好

跨功能逻辑可以集中写在一起,避免 Options API 的"跳来跳去看逻辑"。


二、适用场景对比(面试官喜欢问)

场景 优选
小项目/简单逻辑 Options API
大型项目/多人协作 Composition API
需要高度抽象复用 Composition API
新项目 Composition API
Typescript 项目 Composition API

三、典型代码对比(快速理解差异)

Options API(逻辑分散)

xml 复制代码
<script>
export default {
  data() {
    return { count: 0 }
  },
  methods: {
    add() {
      this.count++
    }
  }
}
</script>

Composition API(逻辑聚合)

xml 复制代码
<script setup>
import { ref } from 'vue'

const count = ref(0)
const add = () => count.value++
</script>

四、深挖追问(面试官必问)


追问 1:Composition API 有没有缺点?

有:

  1. 初学者写法自由,容易写出失控代码
  2. 可读性在小项目不如 Options API
  3. 所有变量都暴露给 template,可能混乱

会回答缺点 = 加分。


追问 2:Composition API 会不会导致组件逻辑过大?

会,所以必须拆成 Composable 函数

javascript 复制代码
// useUser.js
export function useUser() {
  const user = ref(null)
  const loadUser = () => {}
  return { user, loadUser }
}

结构化拆分是 Composition API 的核心价值。


追问 3:Options API 会被废弃吗?

不会。

Vue 官方声明 永远支持 Options API


追问 4:Composition API 和 setup 写法的生命周期怎么记?

Options API Composition API(setup)
created (setup 中执行)
mounted onMounted
updated onUpdated
unmounted onUnmounted
beforeMount onBeforeMount
beforeUpdate onBeforeUpdate
beforeUnmount onBeforeUnmount

这是面试必考点。


追问 5:Composition API 是否一定性能更好?

不一定。

二者性能几乎相同,主要差异在可维护性。


五、killer 问题(高分回答必杀技)

❓ 为什么 Vue3 推 Composition API,而不是继续强化 Options API?

可以这么回答(非常加分):

Vue3 的目标之一是解决组件逻辑分散、复用困难的问题。

Options API 天生分散(data/methods/watch 分开),工程复杂后难维护。

Composition API 将逻辑聚合到函数中,更适合大型工程、跨项目复用、TypeScript 支持、Tree-shaking 优化。

所以 Vue3 并不是"替换 Options API",而是"补足 Vue2 的长痛点"。


六、最终总结(1 分钟背诵版)

Composition API 更灵活、更可复用、更支持 TS、更利于代码组织。
Options API 逻辑分散、复用困难,更适合小项目。
Vue3 推荐 Composition API,但官方保证 Options API 不会废弃。

相关推荐
Learner8 小时前
Python异常处理
java·前端·python
tao3556678 小时前
VS Code登录codex,报错(os error 10013)
java·服务器·前端
军军君018 小时前
Three.js基础功能学习七:加载器与管理器
开发语言·前端·javascript·学习·3d·threejs·三维
JarvanMo8 小时前
情迷服务器驱动 UI:我在 Flutter 开发中的爱与哀愁
前端
tzy2338 小时前
分享一个 HTTP(S) 代理&抓包工具,拦截和Mock Web客户端请求和服务端响应
前端·网络协议·http
代码小学僧8 小时前
普通前端仔的 2025 : 年终总结与 AI 对我的影响
前端·程序员·ai编程
Mike_jia8 小时前
TCP 粘包/拆包问题
前端
沐墨染8 小时前
敏感词智能检索前端组件设计:树形组织过滤与多维数据分析
前端·javascript·vue.js·ui·数据挖掘·数据分析
Kagol8 小时前
🎉TinyPro v1.4.0 正式发布:支持 Spring Boot、移动端适配、新增卡片列表和高级表单页面
前端·typescript·开源
乌暮8 小时前
JavaEE初阶---《JUC 并发编程完全指南:组件用法、原理剖析与面试应答》
java·开发语言·后端·学习·面试·java-ee