核心定位与设计初衷
选项式API(Options API)是Vue 2原生方案,面向新手、约定优先。
通过data/methods/computed/watch等固定选项分割代码,利用框架内置规则做职责划分。
降低入门门槛,早期Vue生态、业务组件、老项目均以此为基础。
而组合式API(Composition API)是Vue 3主推方案,面向复杂业务、逻辑复用。
基于setup+组合函数(ref/reactive/computed/watch等)实现,核心解决大型组件逻辑碎片化、跨组件逻辑复用难、类型支持弱三大问题。
二者并非替代关系,而是互补选型,Vue官方也长期兼容两套写法。
设计权衡
代码组织层面
选项式API:
按功能类型拆分代码(数据、方法、计算属性、生命周期)。
能够做到结构统一、一目了然,新手易读、团队统一规范成本低。
但是在复杂组件中,同一业务逻辑会被拆分到不同选项 (如表单校验逻辑散在data、methods、watch)。
尤其跨区域跳转阅读成本高,组件越臃肿维护越困难。
组合式API:
按业务逻辑聚合代码(同一功能的状态、方法、监听写在一起)。
能做到高内聚,复杂业务模块边界清晰,长组件可读性、可维护性大幅提升。
但是无强制格式约束,不当编码易出现代码混乱,对开发者编码规范要求更高。
所以现在很多公司有针对前端开发的格式规范,比如阿里。
逻辑复用
这是两套API最核心的设计差异。
选项式API依赖 mixin 复用通用逻辑。
这种方案存在原生缺陷,会导致命名冲突、隐式依赖、合并规则不透明、多mixin嵌套溯源困难,不适合中大型项目大规模使用。
而组合式API将复用逻辑抽离为独立组合函数(自定义hooks) 进行复用。
基于函数作用域隔离状态,显式导入、显式使用,无命名污染。
同时支持参数传参、返回状态,复用灵活且可溯源,是Vue官方推荐的逻辑复用方案。
TypeScript 支持
选项式API基于对象选项声明,类型推导存在短板,复杂场景需要额外类型声明,类型体验一般。
而组合式API天然基于ES函数编写,完美贴合TS类型系统,变量、函数类型推导精准,是大型工程化、TS项目的首选。
1分钟精简口述版
Vue 选项式API和组合式API是Vue针对不同场景、不同复杂度设计的两套方案,各有取舍。
选项式API靠固定选项划分代码,上手简单、规范统一,适合简单页面和老项目,但复杂组件逻辑分散,mixin复用存在隐患。
组合式API以setup和组合函数为核心,按业务逻辑聚合代码,自定义hooks复用更干净,TS支持也更优秀,更适配大型复杂项目。
简单组件、快速开发我会用选项式。
复杂业务、需要逻辑复用、TS项目则选用组合式,实际开发中也会根据业务场景灵活混用。
其实二者没有优劣之分,只有场景适配。
组合式API也借鉴了React Hooks的函数复用思想,但结合Vue响应式做了差异化设计。