vue.js的组合式api与options api本质是关注点不同:前者按功能聚合代码,后者按类型分隔;组合式api通过composable函数实现清晰复用,options api依赖mixins易冲突;新项目推荐组合式+,老项目可兼容并存。

Vue.js 的组合式 API 和 Options API 是两种根本不同的组件组织思路,不是“新旧替代”,而是“关注点不同”——一个按功能打包,一个按类型归档。
代码组织逻辑:功能聚合 vs 类型分隔
Options API 把同类东西放一起:所有数据在 data 里,所有方法在 methods 里,所有计算属性在 computed 里。写一个搜索功能,关键词、过滤逻辑、翻页状态、请求方法可能分散在四个地方,维护时得来回跳转。
组合式 API 把一件事的相关代码全堆在一起:比如“用户列表”功能,把 users、loading、searchKeyword、fetchUsers()、watch(searchKeyword)、onMounted 全写在相邻几行。改需求时,只看这一小块就够了。
- Options API 像整理文件夹:把所有 .js 放 js 文件夹,所有 .css 放 css 文件夹
- 组合式 API 像打包项目:把某个页面用到的 JS、CSS、API 调用、状态全部塞进一个
useUserList函数里
逻辑复用方式:composable 函数 vs mixins
Options API 复用逻辑主要靠 mixins,但容易冲突——比如两个 mixin 都定义了 handleClick,谁覆盖谁?来源也不好追踪。
组合式 API 用可组合函数(composable),比如 useCounter() 或 useFormValidation(),导出明确的响应式变量和方法,解构使用,命名可控,类型推导清晰,还能自动参与 tree-shaking。
- mixins 是“悄悄注入”,容易污染组件实例
- composable 是“显式引入”,调用即用,不侵入 this,也不影响其他逻辑
- TypeScript 下,composable 的返回类型可精确标注,
ref<number></number>比data() { return { count: 0 } }更易约束
开发体验与适用场景
Options API 对新手更友好:结构固定,this.count 直观,IDE 补全成熟,适合教学、小工具或快速原型。
组合式 API 在中大型项目里优势明显:逻辑边界清晰、跨组件复用方便、调试路径短、配合 <script setup></script> 写法更简洁。主流生态(Nuxt 3、VitePress、Element Plus)已默认采用。
- 新项目建议直接用组合式 +
<script setup></script> - 老项目维护可继续用 Options API,Vue 3 完全兼容
- 混合使用也允许:一个组件里部分逻辑用组合式,部分用 Options(需注意响应式访问方式统一)
生命周期与响应式写法差异
Options API 生命周期是方法名(mounted、watch),直接写在选项里;组合式 API 是函数调用(onMounted(() => {...})、watch(...)),必须在 setup 或 <script setup></script> 中执行。
响应式声明也不同:Options API 隐式处理 data() 返回对象;组合式 API 显式调用 ref() 或 reactive(),值要通过 .value 访问(ref)或直接读写(reactive)。
-
ref(0)→count.value++ -
reactive({ count: 0 })→state.count++ - 模板中
{{ count }}自动解包ref,无需写.value
大量免费API接口:立即使用
涵盖生活服务API、金融科技API、企业工商API、等相关的API接口服务。免费API接口可安全、合规地连接上下游,为数据API应用能力赋能!










