【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 不会废弃。

相关推荐
tedcloud1233 小时前
UI-TARS-desktop部署教程:构建AI桌面自动化系统
服务器·前端·人工智能·ui·自动化·github
Mahir086 小时前
Redis 与 MySQL 数据同步:一致性保证的完整解决方案
数据库·redis·mysql·缓存·面试·数据一致性
UXbot6 小时前
AI原型设计工具如何支持团队协作与快速迭代
前端·交互·个人开发·ai编程·原型模式
ZC跨境爬虫7 小时前
跟着MDN学HTML_day_48:(Node接口)
前端·javascript·ui·html·音视频
刀法如飞8 小时前
Go 字符串查找的 20 种实现方式,用不同思路解决问题
算法·面试·程序员
PieroPc9 小时前
CAMWATCH — 局域网摄像头监控系统 Fastapi + html
前端·python·html·fastapi·监控
巴巴博一10 小时前
2026 最新:Trae / Cursor 一键接入 taste-skill 完整教程(让 AI 前端告别“AI 味”)
前端·ai·ai编程
kyriewen10 小时前
半夜三点线上崩了,AI替我背了锅——用AI排错,五分钟定位三年老bug
前端·javascript·ai编程
kyriewen10 小时前
我让 AI 当了 24 小时全年无休的“毒舌考官”
前端·ci/cd·ai编程
hexu_blog10 小时前
vue+java实现图片批量压缩
java·前端·vue.js