小红书前端架构面试问的挺深入啊!面试官:Vue中组合式API与选项式API的设计权衡

核心定位与设计初衷

选项式API(Options API)是Vue 2原生方案,面向新手、约定优先

通过data/methods/computed/watch等固定选项分割代码,利用框架内置规则做职责划分。

降低入门门槛,早期Vue生态、业务组件、老项目均以此为基础。

而组合式API(Composition API)是Vue 3主推方案,面向复杂业务、逻辑复用

基于setup+组合函数(ref/reactive/computed/watch等)实现,核心解决大型组件逻辑碎片化、跨组件逻辑复用难、类型支持弱三大问题。

二者并非替代关系,而是互补选型,Vue官方也长期兼容两套写法。

设计权衡

代码组织层面

选项式API

功能类型拆分代码(数据、方法、计算属性、生命周期)。

能够做到结构统一、一目了然,新手易读、团队统一规范成本低。

但是在复杂组件中,同一业务逻辑会被拆分到不同选项 (如表单校验逻辑散在datamethodswatch)。

尤其跨区域跳转阅读成本高,组件越臃肿维护越困难。

组合式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响应式做了差异化设计。

相关推荐
KaifuZeng15 分钟前
通信与接口协议面试十七、SFP光模块
单片机·嵌入式硬件·面试·通信与接口协议
自然 醒31 分钟前
前端如何实现在线预览office常见文件功能?
前端·vue.js
肉肉不吃 肉1 小时前
前端调试跨域如何解决
前端·vue.js
weedsfly1 小时前
单例模式在前端中的正确打开方式
前端·javascript·面试
卓怡学长1 小时前
w268基于springboot + vue 物流系统
java·数据库·vue.js·spring boot·spring·intellij-idea
帅次2 小时前
Android 高级工程师面试:网络与数据层 近1年高频追问 18 题
android·网络·okhttp·面试·retrofit·gilde
tkevinjd12 小时前
力扣437路径总和III
算法·leetcode·面试·职场和发展
奔跑的蜗牛ing16 小时前
CentOS Nginx 安装与静态文件服务器配置指南
前端·面试·架构
迅速的自行车17 小时前
从一段模板说起
前端·javascript·vue.js
KaifuZeng19 小时前
通信与接口协议面试五、RS422
嵌入式硬件·面试·通信与接口