当前位置: 首页 > news >正文

Vue 选项式 API vs 组合式 API:区别全解析

前言

如果你刚开始学习 Vue 3,你可能会听到两个词:选项式 API组合式 API。它们是什么?有什么区别?应该用哪个?这篇文章用最简单的方式讲清楚。


一、什么是选项式 API?

选项式 API 是 Vue 2 时代的经典写法,也是 Vue 3 仍然支持的写法。

特点:按类型分组

代码按照datamethodscomputed等选项分类:

export default { data() { return { count: 0, name: '张三' } }, methods: { add() { this.count++ }, sayHi() { console.log('我是' + this.name) } }, computed: { double() { return this.count * 2 } }, mounted() { console.log('组件挂载了') } }

关键点:

  • ✅ 结构清晰,新手友好
  • ✅ 每个选项有明确的用途
  • ❌ 相关的代码被分散到不同位置
  • ❌ 需要用this访问数据

二、什么是组合式 API?

组合式 API 是 Vue 3 新增的写法,更灵活、更强大。

特点:按功能分组

相关的代码写在一起:

import { ref, computed, onMounted } from 'vue' export default { setup() { // 计数相关功能 const count = ref(0) const double = computed(() => count.value * 2) const add = () => { count.value++ } // 用户信息相关功能 const name = ref('张三') const sayHi = () => { console.log('我是' + name.value) } // 生命周期 onMounted(() => { console.log('组件挂载了') }) return { count, double, add, name, sayHi } } }

更简洁的<script setup>写法(推荐):

<script setup> import { ref, computed, onMounted } from 'vue' // 计数相关功能 const count = ref(0) const double = computed(() => count.value * 2) const add = () => count.value++ // 用户信息相关功能 const name = ref('张三') const sayHi = () => console.log('我是' + name.value) // 生命周期 onMounted(() => console.log('组件挂载了')) </script>

关键点:

  • ✅ 相关代码组织在一起
  • ✅ 不需要this
  • ✅ 更容易复用逻辑(Composables)
  • ❌ 需要理解响应式 API(ref、reactive)

三、核心区别:this的使用

选项式 API:到处用this

export default { data() { return { name: '张三', count: 0 } }, methods: { sayHi() { // 必须用 this 访问 data console.log(this.name) }, add() { // 必须用 this 访问其他数据 this.count++ } } }

为什么需要this

因为datamethodscomputed写在不同的地方,它们之间需要this来连接。

组合式 API:不需要this

import { ref } from 'vue' export default { setup() { const name = ref('张三') const count = ref(0) const sayHi = () => { // 直接用,不需要 this console.log(name.value) } const add = () => { // 直接用,不需要 this count.value++ } return { name, count, sayHi, add } } }

为什么不需要this

因为所有变量都在setup()函数的同一个作用域内,就像普通 JavaScript 一样直接使用。


四、生活比喻

选项式 API = 餐厅点餐

菜单分类: - 前菜区 - 主菜区 - 甜品区 你需要的东西分散在不同区域 需要说"我要主菜区的牛排"

组合式 API = 自助餐

所有东西都在一个台子上 你可以自由组合: - 牛排配薯条(相关的一组) - 沙拉配汤(相关的一组) 需要什么直接拿

五、完整对比示例

示例:一个用户信息表单

选项式 API:
export default { data() { return { form: { username: '', phone: '', email: '' }, loading: false, rules: { username: [{ required: true, message: '请输入用户名' }] } } }, computed: { isValid() { return this.form.username && this.form.phone } }, methods: { async submit() { this.loading = true // 提交逻辑... this.loading = false }, reset() { this.form.username = '' this.form.phone = '' this.form.email = '' } } }
组合式 API:
<script setup> import { ref, computed } from 'vue' // 表单数据 const form = ref({ username: '', phone: '', email: '' }) // 表单验证规则 const rules = { username: [{ required: true, message: '请输入用户名' }] } // 加载状态 const loading = ref(false) // 计算属性 const isValid = computed(() => { return form.value.username && form.value.phone }) // 提交方法 const submit = async () => { loading.value = true // 提交逻辑... loading.value = false } // 重置方法 const reset = () => { form.value.username = '' form.value.phone = '' form.value.email = '' } </script>

六、优缺点对比

对比项选项式 API组合式 API
上手难度⭐ 简单⭐⭐⭐ 需要学习新概念
代码组织按类型分组按功能分组
this 使用到处需要 this不需要 this
逻辑复用Mixins(容易冲突)Composables(清晰)
TypeScript支持一般支持很好
代码量较多(boilerplate 多)较少
适合场景简单组件、小项目复杂逻辑、大项目

七、什么时候用哪个?

用选项式 API:

  • ✅ 你刚学 Vue,想要简单易懂
  • ✅ 组件逻辑简单,代码量少
  • ✅ 团队成员更熟悉 Vue 2

用组合式 API:

  • ✅ 项目复杂,逻辑多
  • ✅ 需要复用逻辑(多个组件用同一套逻辑)
  • ✅ 想要更好的 TypeScript 支持
  • ✅ 新项目,没有历史包袱

八、实际项目例子

看看你项目中的代码:

stores/user.js(组合式 API)

import { defineStore } from 'pinia'; import { ref } from 'vue'; export const useUserStore = defineStore('user', () => { // 状态 const user = ref({}) const token = ref("") // 方法 function login(username, password) { // ... } function logout() { // ... } // 返回 return { user, token, login, logout } })

为什么用组合式?

  • usertokenloginlogout都是用户相关的功能
  • 放在一起,逻辑清晰
  • 不需要this.userthis.token,直接用

九、总结

核心区别一句话:

写法特点
选项式 API代码按类型分类(data、methods 分开),用this连接
组合式 API代码按功能分类(相关的一起),不用this

我的建议:

  • 新手:先学选项式 API,理解 Vue 的基本概念
  • 进阶:转向组合式 API,享受更好的代码组织
  • 新项目:直接用组合式 API +<script setup>

十、学习资源

  • Vue 3 官方文档 - 组合式 API
  • Vue 3 风格指南

有问题?欢迎留言讨论!

http://www.jsqmd.com/news/374306/

相关文章:

  • 别再乱买庭院灯了!揭秘行业核心参数,这5家源头工厂值得入手 - 深度智识库
  • 2026年衡水口碑不错的短视频拍摄公司排名,亚云科技名列前茅 - mypinpai
  • 钉钉的IM私有化替代方案,2类5款哪个是最好的? - 企业数字化观察家
  • 当CRM系统不堪重负,重药集团如何通过OceanBase实现“实时精准营销”?
  • 微信小程序发布记录
  • 瑞祥商联卡的实用回收途径,闲置卡片快速盘活不浪费 - 可可收
  • 衡水AI搜索推广服务费用多少,亚云科技性价比情况解读 - 工业品网
  • 详细介绍:Docker 安装mysql8.0 主从同步
  • 2026年口碑好的固态继电器电力调整器厂家最新热销排行 - 深度智识库
  • 2026年数控折弯机价格大比拼,拓普森数控折弯机口碑怎么样 - 工业推荐榜
  • 2026年厦门老房装修公司推荐:旧房改造趋势评测,涵盖局部与整装场景施工质量痛点 - 品牌推荐
  • 2026年拓普森数控折弯机品牌十大排名,哪家更值得选 - 工业品牌热点
  • 探讨靠谱的过山车设备,天鸿游乐过山车厂优势在哪? - myqiye
  • 如何为不同房龄二手房选装修公司?2026年厦门二手房装修公司全面评测与推荐 - 品牌推荐
  • 总结有实力的巨量推广企业,唐山地区排名前十的有哪些? - 工业品牌热点
  • Comsol电磁波模型:金属超表面光栅,TE/TM偏振下斜入射不同衍射级反射光谱计算
  • 提取浓缩装置优质供应商怎么选,沙家浜药机是优选 - 工业设备
  • 2026年杭州新郎西服西装租聘推荐,靠谱商家排名大揭秘 - mypinpai
  • 2026年全国电梯厂家权威榜单 涵盖制造安装维保 适配住宅公共设施 精准选型解析 - 深度智识库
  • iOS签名是什么?为什么苹果APP需要签名
  • 2026年度厦门二手房装修公司推荐榜单:施工品质与居住价值双维度综合评估 - 品牌推荐
  • 2026年厦门中式风格装修公司推荐:基于多区案例实证排名,针对环保与定制核心痛点解析 - 品牌推荐
  • 2026年江西滚筒流水线定制厂家费用大揭秘,多少钱能搞定? - 工业品网
  • 2026年2月厦门新房装修公司实战报告:主流服务商施工品质及交付效能对比 - 品牌推荐
  • 2026年厦门新房装修公司推荐:居家场景深度评测,解决预算漏项与环保痛点并附购买排名 - 品牌推荐
  • 怎么挑选瑞祥商联卡回收渠道,国内三大平台任选 - 淘淘收小程序
  • 2026年石家庄地区婚礼策划服务推荐,靠谱品牌全解析哪家好 - 工业设备
  • 2026年全国电梯品牌哪家好?技术先进服务完善 全流程服务有保障 多细分领域全覆盖 - 深度智识库
  • 大润发购物卡别浪费,教你一秒变现的小妙招! - 团团收购物卡回收
  • 斯玛特卡回收全攻略:如何选择最靠谱的回收流程? - 团团收购物卡回收