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

选项式api和组合式api

概念对比

  • 选项式 API(Options API):用 data / computed / methods / watch / mounted 等“配置项”组织代码,逻辑按“类型”分组,易读、上手快。
  • 组合式 API(Composition API):在 setup() 或 <script setup> 中用 ref / reactive / computed / watch / onMounted 等“函数”组织代码,逻辑按“功能”分组,复用更强、类型更友好。

写法对比(同一功能)

Options API

<script lang="ts">
export default {data() {return { count: 0 }},computed: {double() { return this.count * 2 }},methods: {inc() { this.count++ }},mounted() {console.log('mounted')}
}
</script>

Composition API(<script setup>)

<script setup lang="ts">
import { ref, computed, onMounted } from 'vue'const count = ref(0)
const double = computed(() => count.value * 2)
function inc() { count.value++ }onMounted(() => console.log('mounted'))
</script>

核心区别

  • 组织方式
  • 选项式:按“数据/计算/方法/生命周期”分散在不同块。
  • 组合式:把同一业务逻辑的相关变量与函数放在一起,模块化更好(useXxx 组合函数)。
  • this 使用
  • 选项式:通过 this 访问实例数据与方法。
  • 组合式:无需 this,直接用变量;利于类型推断与重构。
  • 类型推断
  • 选项式:this 的类型在 TS 下相对弱,需额外声明。
  • 组合式:天然与 TS 友好,局部变量类型清晰。
  • 复用与抽离
  • 选项式:复用常依赖 mixin(命名冲突、来源不清)。
  • 组合式:提取为 useXxx 组合函数,依赖清晰、可测试。
  • 学习曲线
  • 选项式:对初学者更直观。
  • 组合式:概念略多,但中大型项目更受益。

响应式对比

  • 选项式:data() 返回的属性自动转为响应式。
  • 组合式:用 ref/ reactive 显式创建响应式;原始变量不是响应式(你项目中的 setup 示例就演示了这点)。

生命周期对比

  • 选项式:created / mounted / updated / unmounted 等。
  • 组合式:onMounted / onUpdated / onUnmounted 等,在 setup() 内调用。

何时选择

  • 选项式 API 优先:小型/演示项目、团队以 Vue2 背景为主、逻辑简单。
  • 组合式 API 优先:中大型项目、强 TS 需求、需要抽离复用逻辑、复杂状态管理与副作用控制。

可以混用吗?

  • 可以在同一组件里混用(如你 Person.vue 里既有 Options 又有 setup),但实际项目建议“以一种为主”,保持风格统一。

实战建议

  • 新项目推荐使用 <script setup> + 组合式 API 为主;老项目渐进式引入,在公共逻辑中抽 useXxx 组合函数。
  • 如果团队成员多为 Vue2 经验且业务简单,选项式也完全可行。
    http://www.dtcms.com/a/338782.html

    相关文章:

  • 【冒泡排序】
  • Java 检查给定的四个点是否形成正方形(Check if given four points form a square)
  • Springboot 3 上传图片,并返回路径让前端显示图片
  • 《UE5_C++多人TPS完整教程》学习笔记43 ——《P44 奔跑混合空间(Running Blending Space)》
  • 监督分类——最小距离分类、最大似然分类、支持向量机
  • Spring Boot 敏感词过滤组件实现:基于DFA算法的高效敏感词检测与替换
  • BROADCHIP广芯电子在各类电子产品的方案与应用
  • 3、栈和队列
  • Ansible 配置并行 - 项目管理笔记
  • 零知开源——基于STM32F407VET6与GY-271三轴地磁传感器的高精度电子罗盘设计与实现
  • TensorFlow 面试题及详细答案 120道(11-20)-- 操作与数据处理
  • Auto-CoT:大型语言模型的自动化思维链提示技术
  • OpenCV快速入门(C++版)
  • 常见的 Bash 命令及简单脚本
  • 从 0 到 1 开发校园二手交易系统:飞算 JavaAI 全流程实战
  • 无畏契约手游上线!手机远控模拟器畅玩、抢先注册稀有ID!
  • Windows/Centos 7下搭建Apache服务器
  • MySQL-分库分表(Mycat)
  • 第一章 认识单片机
  • 出现了常规系统错误: Unable to push signed certificate to host 192.168.1.2
  • 从数据表到退磁:Ansys Maxwell中N48磁体磁化指南
  • LINUX 软件编程 -- 线程
  • 决策树的学习(二)
  • MCP(模型上下文协议):是否是 AI 基础设施中缺失的标准?
  • jsPDF 不同屏幕尺寸 生成的pdf不一致,怎么解决
  • Ansible 中的文件包含与导入机制
  • java17学习笔记-Deprecate the Applet API for Removal
  • C语言基础:(十八)C语言内存函数
  • 连接远程服务器上的 jupyter notebook,解放本地电脑
  • 计算机毕设推荐:痴呆症预测可视化系统Hadoop+Spark+Vue技术栈详解