从 Vue3 回望 Vue2:组件设计升级——Options API vs Composition API
文章目录
- 从 Vue3 回望 Vue2:组件设计升级——Options API vs Composition API
- 1、组件范式:框架设计思想的投影
- 2、Vue2:Options API 的结构与局限
- 结构清晰:新手友好、职责分明
- 核心痛点:逻辑分散,难以聚合复用
- 3、Vue3:Composition API 的设计初衷与优势
- `setup()`:组合逻辑的舞台
- 更强逻辑聚合与复用能力
- 4、实战对比:同一个计数器组件的两种实现
- Vue2 - Options API 版本
- Vue3 - Composition API 版本
- 5、结构对比图示:从“纵向配置”到“横向组合”
- 6、优劣对比分析表
- 7、现代实践:组合 Composition API + TypeScript + Pinia
- 实现优势:
- 8、Composition API 的挑战与迁移建议
- 挑战
- 迁移策略
- 9、实战提问 & 面试关注点
- 面试核心对比点 & 快速答要
- 结语:从配置者到设计者,框架演化是开发者思维的进化
从 Vue3 回望 Vue2:组件设计升级——Options API vs Composition API
一语点睛:组件不是逻辑堆叠,而是能力组合。
1、组件范式:框架设计思想的投影
Vue 中的一切皆组件,组件的编写方式不仅影响开发效率,更是框架设计哲学的直观体现。从 Vue2 的 Options API 到 Vue3 的 Composition API,这场变革不仅是代码结构的调整,更是从“配置式开发”走向“组合式设计”的理念跃迁。
本文将以 Vue2 为历史起点,通过对比与实战,引导读者理解 Vue3 组件设计的优势与挑战,完成从使用者到设计者的思维转变。
2、Vue2:Options API 的结构与局限
结构清晰:新手友好、职责分明
Vue2 的 Options API 通过对象配置划分组件职责,结构上包括:
export default {data() {return {count: 0}},computed: {double() {return this.count * 2}},methods: {increment() {this.count++}},watch: {count(newVal) {console.log('count changed:', newVal)}},mounted() {console.log('component mounted')}
}
每个功能点(数据、方法、副作用)都有对应的选项块,初学者能快速上手,IDE 补全也较友好。
核心痛点:逻辑分散,难以聚合复用
- 同一功能被拆散在多个选项中:例如“倒计时”逻辑可能分布在
data
、mounted
、methods
、watch
中。 - 逻辑复用高度依赖 mixins:容易变量冲突、来源不明确。
- 生命周期钩子分散:组件越大,逻辑越零散,阅读难度倍增。
3、Vue3:Composition API 的设计初衷与优势
setup()
:组合逻辑的舞台
Vue3 推出的 Composition API 将逻辑组织中心前置到了 setup()
中:
import { ref, computed, watch, onMounted } from 'vue'export default {setup() {const count = ref(0)const double = computed(() => count.value * 2)const increment = () => count.value++watch(count, (newVal) => {console.log('count changed:', newVal)})onMounted(() => {console.log('component mounted')})return {count,double,increment}}
}
更强逻辑聚合与复用能力
- 所有与“count”相关的逻辑集中书写。
- 可提取为 composable(如
useCounter()
),实现逻辑复用。 - 生命周期、响应式、副作用统一在顶层语义中声明。
4、实战对比:同一个计数器组件的两种实现
Vue2 - Options API 版本
export default {data() {return {count: 0}},methods: {increment() {this.count++}},computed: {double() {return this.count * 2}},watch: {count(newVal) {console.log('watch:', newVal)}},mounted() {console.log('mounted')}
}
Vue3 - Composition API 版本
import { ref, computed, watch, onMounted } from 'vue'export default {setup() {const count = ref(0)const double = computed(() => count.value * 2)const increment = () => count.value++watch(count, (val) => console.log('watch:', val))onMounted(() => console.log('mounted'))return { count, double, increment }}
}
5、结构对比图示:从“纵向配置”到“横向组合”
Options API(Vue2):
+ data
+ methods
+ computed
+ watch
+ lifecycle
=> 纵向拆分逻辑块Composition API(Vue3):
+ setup()└─ ref()└─ computed()└─ watch()└─ 生命周期
=> 横向组合功能块
6、优劣对比分析表
对比维度 | Options API(Vue2) | Composition API(Vue3) |
---|---|---|
逻辑聚合 | ❌ 分散在多个选项中 | ✅ 相关逻辑集中,易读维护 |
类型推导 | ❌ 较弱(尤其在 methods 中) | ✅ TS 友好,类型推导精准 |
逻辑复用 | ❌ 依赖 mixins、继承 | ✅ composables(函数级复用) |
学习曲线 | ✅ 容易上手 | ❌ 初学者需理解响应式与 setup 机制 |
工具支持 | ✅ Vue2 DevTools 成熟 | ✅ Vue3 DevTools 更直观追踪逻辑 |
团队协作 | ✅ 各选项独立,职责清晰 | ✅ 明确逻辑边界,可抽离共享逻辑模块 |
7、现代实践:组合 Composition API + TypeScript + Pinia
import { defineComponent, ref, computed } from 'vue'
import { useUserStore } from '@/stores/user'export default defineComponent({setup() {const userStore = useUserStore()const input = ref('')const isValid = computed(() => input.value.length > 3)const submit = async () => {if (!isValid.value) returnawait userStore.login(input.value)}return { input, isValid, submit }}
})
实现优势:
- 状态(Pinia)解耦;
- TS 语义清晰;
- 响应式逻辑与 UI 行为紧密绑定,提升可测试性与团队协作效率。
8、Composition API 的挑战与迁移建议
挑战
- 对响应式原理需更深理解(如
ref
vsreactive
)。 - 需要熟悉生命周期组合函数(如
onMounted
,onBeforeUnmount
等)。 - 初学者可能因
setup
抽象过多而感到困惑。
迁移策略
- 从“小组件”先试水;
- 团队统一
useXXX
composable 规范; - 使用
9、实战提问 & 面试关注点
面试核心对比点 & 快速答要
题目 | 简明回答要点 |
---|---|
setup() 的执行时机? | 在 beforeCreate 之前调用,不能访问 this |
ref 与 reactive 有何区别? | ref 用于基本类型,reactive 用于对象;前者.value 才访问数据 |
Options API 为什么难以复用逻辑? | 因为逻辑被拆分在多个块,无法提取为独立函数 |
如何迁移大型 Options API 组件? | 拆分成逻辑单元,逐步迁移到 composables,测试保障逻辑一致性 |
Composition API 与 TS 配合优势? | TS 自动推导返回类型,IDE 补全强,逻辑函数可复用 |
使用 Composition API 时如何组织代码? | 遵循“功能分组 + 局部组合 + 最小暴露”设计原则 |
结语:从配置者到设计者,框架演化是开发者思维的进化
Vue3 的 Composition API 不仅是新的写法,更是组件组织理念的升级。它鼓励我们以“功能为单位”进行思考与设计,打造可复用、可组合、可维护的现代组件。
从 Options 到 Composition,不只是范式的切换,更是开发者走向专业化的里程碑。
相关文章:
从 Vue3 回望 Vue2:组件设计升级——Options API vs Composition API
文章目录 从 Vue3 回望 Vue2:组件设计升级——Options API vs Composition API1、组件范式:框架设计思想的投影2、Vue2:Options API 的结构与局限结构清晰:新手友好、职责分明核心痛点:逻辑分散,难以聚合复…...

寻找两个正序数组的中位数 - 困难
************* Python topic: 4. 寻找两个正序数组的中位数 - 力扣(LeetCode) ************* Give the topic an inspection. Do the old topic will give you some new sparks. Before that, I do some really good craetive things about my logo. …...

国产密码新时代!华测国密 SSL 证书解锁安全新高度
在数字安全被提升到国家战略高度的今天,国产密码算法成为筑牢网络安全防线的关键力量。华测国密SSL证书凭借其强大性能与贴心服务,为企业网络安全保驾护航,成为符合国家安全要求的不二之选! 智能兼容,告别浏览器适配…...

【金仓数据库征文】从云计算到区块链:金仓数据库的颠覆性创新之路
目录 一、引言 二、金仓数据库概述 2.1 金仓数据库的背景 2.2 核心技术特点 2.3 行业应用案例 三、金仓数据库的产品优化提案 3.1 性能优化 3.1.1 查询优化 3.1.2 索引优化 3.1.3 缓存优化 3.2 可扩展性优化 3.2.1 水平扩展与分区设计 3.2.2 负载均衡与读写分离 …...
互联网大厂Java求职面试:AI与大模型集成的云原生架构设计
互联网大厂Java求职面试:AI与大模型集成的云原生架构设计 引言 在现代互联网企业中,AI与大模型技术的应用已经成为不可或缺的一部分。特别是在短视频平台、电商平台和金融科技等领域,如何高效地将大模型集成到现有的云原生架构中是一个巨大…...

股指期货套期保值怎么操作?
股指期货套期保值就是企业或投资者通过持有与其现货市场头寸相反的期货合约,来对冲价格风险的一种方式。换句话说,就是你在股票市场上买了股票(现货),担心股价下跌会亏钱,于是就在期货市场上卖出相应的股指…...

基于IBM BAW的Case Management进行项目管理示例
说明:使用IBM BAW的难点是如何充分利用其现有功能根据实际业务需要进行设计,本文是示例教程,因CASE Manager使用非常简单,这里重点是说明如何基于CASE Manager进行项目管理,重点在方案设计思路上,其中涉及的…...

黑马k8s(七)
1.Pod介绍 查看版本: 查看类型,这里加s跟不加s没啥区别,可加可不加 2.Pod基本配置 3.镜像拉去策略 本地没有这个镜像,策略是Never,启动失败 查看拉去策略: 更改拉去策略: 4.启动命令 运行的是nginx、busv…...

九、HQL DQL七大查询子句
作者:IvanCodes 日期:2025年5月15日 专栏:Hive教程 Apache Hive 的强大之处在于其类 SQL 的查询语言 HQL,它使得熟悉 SQL 的用户能够轻松地对存储在大规模分布式系统(如 HDFS)中的数据进行复杂的查询和分析…...
基于中心点预测的视觉评估与可视化流程
基于中心点预测的视觉评估与可视化流程 基于中心点预测的视觉评估与可视化流程一、脚本功能概览二、可视化与评分机制详解1. 真实框解析2. 调用模型处理帧3. 预测中心点与真实值的对比4. 打分策略5. 图像可视化三、目录结构要求四、运行方式五、应用场景与拓展思路六、总结七,…...

RTSP 播放器技术探究:架构、挑战与落地实践
RTSP 播放器为什么至今无法被淘汰? 在实时视频传输领域,RTSP(Real-Time Streaming Protocol)作为最基础、最常见的协议之一,至今依然被广泛用于监控设备、IP Camera、视频服务器等设备中。然而,要构建一个稳…...

实验5 DNS协议分析与测量
实验5 DNS协议分析与测量 1、实验目的 了解互联网的域名结构、域名系统DNS及其域名服务器的基本概念 熟悉DNS协议及其报文基本组成、DNS域名解析原理 掌握常用DNS测量工具dig使用方法和DNS测量的基本技术 2、实验环境 硬件要求:阿里云云主机ECS 一台。 软件要…...
编程日志5.8
二叉树练习题 1.965. 单值二叉树 - 力扣(LeetCode) /** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode() : val(0), left(nullptr), right(nullptr) {} * TreeNode(int x) :…...

【鸿蒙开发】性能优化
语言层面的优化 使用明确的数据类型,避免使用模糊的数据类型,例如ESObject。 使用AOT模式 AOT就是提前编译,将字节码提前编译成机器码,这样可以充分优化,从而加快执行速度。 未启用AOT时,一边运行一边进…...

2025-05-13 学习记录--Python-循环:while循环 + while-else循环 + for循环 + 循环控制
合抱之木,生于毫末;九层之台,起于累土;千里之行,始于足下。💪🏻 一、循环 ⭐️ (一)、while循环 🍭 初始条件设置 -- 通常是重复执行的 计数器while 条件(判…...

Vue3学习(组合式API——生命周期函数基础)
目录 一、Vue3组合式API中的生命周期函数。 (1)各阶段生命周期涉及函数简单介绍。 <1>创建挂载阶段的生命周期函数。 <2>更新阶段的生命周期函数。 <3>卸载阶段的生命周期函数。 <4>错误处理的生命周期函数。 (2&…...
全面指南:Xinference大模型推理框架的部署与使用
全面指南:Xinference大模型推理框架的部署与使用 Xinference(Xorbits Inference)是一个功能强大的分布式推理框架,专为简化各种AI模型的部署和管理而设计。本文将详细介绍Xinference的核心特性、版本演进,并提供多种部署方式的详细指南,包括本地部署、Docker-Compose部署…...

计量——检验与代理变量
1.非嵌套模型的检验 1Davidson-Mackinnon test 判断哪个模型好 log(y)β0β1x1β2x2β3x3u log(y)β0β1log(x1)β2log(x2)β3log(x3)u 1.对logÿ…...
Cocos Creator 3.8.5 构建依赖环境配置文档
Cocos Creator 3.8.5 构建依赖环境配置文档 文章目录 Cocos Creator 3.8.5 构建依赖环境配置文档✅ 构建依赖汇总表✅ 构建平台配置说明👉 Windows 构建👉 Android 构建 ✅ 推荐构建环境组合(稳定)✅ 常见问题提示 适用于打包 An…...
实验五:以太网UDP全协议栈的实现(通过远程实验系统)
文章目录 FPGA以太网:从ARP到UDP的完整协议栈一、引言二、核心模块详解1. ARP协议处理模块1.1 `arp_cache`:ARP缓存模块1.2 `arp_tx`:ARP请求与应答发送模块1.3 `arp_rx`:ARP接收与解析模块2. MAC层处理模块2.1 `mac_layer`:MAC层顶层模块2.2 `mac_tx_mode`:MAC发送模式选…...

HTML-实战之 百度百科(影视剧介绍)
本系列可作为前端学习系列的笔记,代码的运行环境是在HBuilder中,小编会将代码复制下来,大家复制下来就可以练习了,方便大家学习。 系列文章目录 HTML-1.1 文本字体样式-字体设置、分割线、段落标签、段内回车以及特殊符号 HTML…...
了解光学影像
本文来源 : 腾讯元宝 光学影像是一种通过光学技术捕捉、记录和处理图像的技术,广泛应用于医学、工业、安防、科研等多个领域。以下是关于光学影像的详细介绍: 1. 基本原理 光学影像基于光的传播、反射、折射和散射等物理现象。通过…...

计算机视觉---目标追踪(Object Tracking)概览
一、核心定义与基础概念 1. 目标追踪的定义 定义:在视频序列或连续图像中,对一个或多个感兴趣目标(如人、车辆、物体等)的位置、运动轨迹进行持续估计的过程。核心任务:跨帧关联目标,解决“同一目标在不同…...

Weblogic SSRF漏洞复现(CVE-2014-4210)【vulhub靶场】
漏洞概述: Weblogic中存在一个SSRF漏洞,利用该漏洞可以发送任意HTTP请求,进而攻击内网中redis、fastcgi等脆弱组件。 漏洞形成原因: WebLogic Server 的 UDDI 组件(uddiexplorer.war)中的 SearchPublicR…...
fakeroot 在没有超级用户权限的情况下模拟文件系统的超级用户行为
fakeroot 是一个在 Linux 环境中使用的工具,它允许用户在没有超级用户权限的情况下模拟文件系统的超级用户行为。它是一个在 Linux 环境中广泛使用的工具,通常包含在大多数 Linux 发行版的软件仓库中。 主要功能 模拟 root 权限:fake…...

AI大模型应用:17个实用场景解锁未来
任何新技术的普及都需要经历一段漫长的过程,人工智能大模型也不例外。 尽管某些行业的从业者已经开始将大模型融入日常工作,但其普及程度仍远未达到“人手必备”的地步。 那么,究竟是什么限制了它的广泛应用?普通人如何才能用好…...
激光雷达点云畸变消除:MCU vs CPU 方案详解
在移动机器人、自动驾驶等场景中,激光雷达(LiDAR)用于获取高精度的空间点云数据。然而,当雷达在运动中扫描时,不同点的采集时刻对应的位置不同,就会出现“运动畸变(Motion Distortion࿰…...

java17
1.常见API之BigDecimal 底层存储方式: 2.如何分辨过时代码: 有横线的代码表示该代码已过时 3.正则表达式之字符串匹配 注意:如果X不是单一字符,需要加[]中括号 注意:1.想要表达正则表达式里面的.需要\\. 2.想要表…...
深度学习中的提示词优化:梯度下降全解析
深度学习中的提示词优化:梯度下降全解析 在您的代码中,提示词的更新方向是通过梯度下降算法确定的,这是深度学习中最基本的优化方法。 一、梯度下降与更新方向 1. 核心公式 对于可训练参数 θ \theta θ(这里是提示词嵌入向量),梯度下降的更新公式为:...
多智能体Multi-Agent应用实战与原理分析
一:Agent 与传统工具调用的对比 在当今的开发环境中,Agent 的出现极大地简化了工作流程。其底层主要基于提示词、模型和工具。用户只需向 Agent 输入需求,Agent 便会自动分析需求,并利用工具获取最终答案。而传统方式下,若没有 Agent,我们则需要手动编码来执行工具,还要…...