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

选项式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.xdnf.cn/news/18245.html

    相关文章:

  • 如何将Date类型的数据转换为LocalDateTime类型
  • Git的初步学习
  • 【力扣 Hot100】 刷题日记——双指针的经典应用
  • RabbitMQ:SpringAMQP Fanout Exchange(扇型交换机)
  • Java技术总监的成长之路(技术干货分享)
  • 驱动开发系列65 - NVIDIA 开源GPU驱动open-gpu-kernel-modules 目录结构
  • 【PyTorch】多对象分割项目
  • Apache Doris 4.0 AI 能力揭秘(一):AI 函数之 LLM 函数介绍
  • 云计算核心技术之云存储技术
  • oc-mirror plugin v2 错误could not establish the destination for the release i
  • Windows Server DNS优化,网络响应速度提升方案
  • C#传参调用外部exe
  • 【科研绘图系列】R语言绘制多组火山图
  • pytest+requests+allure自动化测试接入Jenkins学习
  • Apache IoTDB 大版本升级记录(成熟的2.0.2版本)
  • 机械原理的齿轮怎么学?
  • 从零开始理解一个复杂的 C++/CUDA 项目 Makefile
  • Chrome插件开发【windows】
  • MyCAT2的主从配置
  • 数据仓库OLTPOLAP维度讲解
  • Spring Cache 整合 Redis 实现高效缓存
  • 数字政务安全实战:等保2.0下OA系统的身份认证与数据防护
  • Mentalab Hypersync高精度无线同步系统:以亚毫秒级助力ExG多模态数据整合
  • 清空 github 仓库的历史提交记录(创建新分支)
  • django生成迁移文件,执行生成到数据库
  • STM32-FreeRTOS快速入门指南(中)
  • 8.19笔记
  • 自建知识库,向量数据库 (十)之 文本向量化——仙盟创梦IDE
  • 在CentOS系统中查询已删除但仍占用磁盘空间的文件
  • 仲裁器设计(三)-- Weighted Round Robin 权重轮询调度