切换导航
简历
工具
演示
查询
导航菜单
服务端
30
前端
114
数据库
82
进阶开发
8
桌面程序
2
QA
15
软件使用
36
规范协议
5
操作系统
11
AI
0
复用资源
6
硬件
0
标签
HTML
正则表达式
Json
包管理工具
vite
CSS
XPath
JavaScript
Jquery
less
ES6
Vue
React
vue 3
Layui
editor.md
sea.js
Zepto.js
mysql.js
mssql.js
NodeJs
Express
前端template
YAML
杂项
外部链接
.NET Core SDK和运行时安装包
淘宝 NPM 镜像
查询网
Tables Generator线上表格转换工具
引用cdn在线脚本和样式
首页
前端
vue 3 选项式API和组合式API
[TOC] <h1>Vue3 组合式API vs 选项式API:全面对比</h1> Vue3 同时支持**选项式API(Options API)** 和**组合式API(Composition API)**,二者核心目标都是实现 Vue 组件开发,但设计思路、使用场景、代码组织方式有明显区别,也存在底层相通的特性。 下面从**相同点**、**核心不同点**、**适用场景**三个维度清晰对比。 ## 相同点(底层一致) + **核心功能完全一致** 都能实现 Vue 组件的所有核心能力:响应式数据、计算属性、侦听器、方法、生命周期、组件通信、指令/过滤器等。 + **共享 Vue 生态** 都可以使用 Vue 官方库(Vue Router/Pinia)、第三方 UI 库(Element Plus)、自定义指令等。 + **可以混合使用** Vue3 支持在同一个组件中**同时使用两种 API**(组合式写在 `setup()` 里,选项式写在外层),兼容 Vue2 代码。 + **编译和运行机制相同** 底层响应式系统、虚拟 DOM、渲染逻辑完全一致,性能没有本质区别。 ## 核心不同点(最关键区别) ### 1. 代码组织方式(最大差异) + **选项式 API**:**按选项分类** 数据放 `data`,方法放 `methods`,计算属性放 `computed`,生命周期按名字写。 ✅ 优点:结构固定,新手易上手; ❌ 缺点:复杂组件代码分散,维护困难。 ```HTML <!-- 选项式 API --> <script> export default { data() { return { count: 0 } }, // 数据 methods: { add() { this.count++ } }, // 方法 computed: { double() { return this.count * 2 } }, // 计算属性 mounted() { console.log('挂载') } // 生命周期 } </script> ``` + **组合式 API**:**按业务逻辑分类** 把**同一个功能**的响应式数据、方法、计算属性写在一起,逻辑高度内聚。 ✅ 优点:复杂组件易维护、逻辑可复用; ❌ 缺点:需要手动管理响应式,新手有学习成本。 ```HTML <!-- 组合式 API(setup 语法糖) --> <script setup> import { ref, computed, onMounted } from 'vue' // 计数器功能(所有相关代码放一起) const count = ref(0) const add = () => count.value++ const double = computed(() => count.value * 2) onMounted(() => console.log('挂载')) </script> ``` ### 2. 逻辑复用能力 + **选项式 API**:只能用 `mixin`/`extend` 缺点:命名冲突、数据来源不清晰、难以维护。 + **组合式 API**:支持**自定义组合函数(Composables)** 可把独立逻辑封装成函数,跨组件复用,无命名冲突,代码清晰。 ```javascript // 封装复用逻辑:useCounter.js import { ref, computed } from 'vue' export function useCounter() { const count = ref(0) const add = () => count.value++ const double = computed(() => count.value * 2) return { count, add, double } } // 组件中直接使用 import { useCounter } from './useCounter' const { count, add } = useCounter() ``` ### 3. 响应式数据定义 + **选项式 API**:自动响应式 `data` 中定义的数据,Vue 自动包装为响应式,直接用 `this.xx` 访问。 + **组合式 API**:手动声明响应式 必须用 `ref`/`reactive` 创建响应式数据,修改变量需要 `.value`(ref)。 ### 4. this 指向 + **选项式 API**:依赖 `this` 所有数据/方法都通过 `this` 访问,`this` 指向组件实例。 + **组合式 API**:**无 `this`** 直接访问变量/函数,避免 `this` 指向混乱(箭头函数/普通函数无差异)。 ### 5. 类型支持(TS) + **选项式 API**:TS 支持较差 `this` 类型难推断,复杂组件类型推导繁琐。 + **组合式 API**:**TS 天然友好** 基于函数,类型推导完美,是大型项目 + TS 的首选。 ### 6. 生命周期使用 + 选项式:直接写选项名(`mounted(){}`) + 组合式:用 `on+生命周期名` 函数(`onMounted(()=>{})`) ## 快速对比表格 | 维度 | 选项式 API | 组合式 API | | :------------------ | :---------------------------------- | :---------------------------------- | | 代码组织 | 按选项分类(data/methods)| 按业务逻辑分类 | | 逻辑复用 | mixin(缺点多)| 组合函数(Composables,推荐)| | 响应式 | 自动处理 | 手动 ref/reactive | | this | 必须使用 this | 无 this | | TypeScript 支持 | 较差 | 优秀 | | 学习成本 | 低,适合新手 | 中等,适合有基础的开发者 | | 适用组件 | 简单组件、小型项目 | 复杂组件、大型项目、需要逻辑复用 | | Vue 版本 | Vue2 默认,Vue3 兼容 | Vue3 主推,Vue2 可通过插件使用 |
扫一扫手机看
点击排行
windows 文件资源管理器使用
Layui 弹窗open使用说明
SQL Server 中字符串函数使用
C# 使用QQ邮箱代理做邮件接收功能
SQL Server关于apply的两种形式cross apply 和 outer apply
ASP.NET MVC 模型的自定义验证
nvm安装及常用命令
SQL Server 中数据类型转换
SQL Server 中WITH AS短语的使用
IE浏览器下AJAX缓存问题导致数据不更新的解决办法
订阅号