vue3.x教程-选项式api和组合式 api

选项式API(Options API)

Vue2 原生写法,Vue3 兼容。把代码按功能拆分到固定选项中:data、methods、computed、watch、mounted 等。

例子

<script>
export default {
  // 数据
  data() {
    return { count: 0 }
  },
  // 方法
  methods: {
    add() { this.count++ }
  },
}
</script>

优点

  1. 入门简单,结构固定,新手易读;
  2. 小型页面、简单组件写起来快捷;
  3. Vue2 项目无缝迁移,无学习成本。

缺点

  1. 大型组件逻辑分散:比如上面代码,实现一个功能,在 data() 中定义变量,在 methods中定义方法等等,即:实现一个功能,代码要散落各处,来回翻代码;
  2. TS 类型支持差,复杂类型编写繁琐;
  3. 依赖 this,回调、箭头函数容易踩坑。

组合式API(Composition API)

Vue3 新增核心,以逻辑功能为单位聚合代码,核心两种写法:

  1. <script setup>(语法糖,推荐)
  2. 原生 setup() 函数

例子

<script setup>
import { ref, computed, onMounted } from 'vue'
// 数据
const count = ref(0)
// 方法
const add = () => count.value++
</script>

优点

  1. 逻辑聚合:同一个业务功能的变量、方法、写在一起,可读性极强;、
  2. 完美适配 TS,类型自动推导;
  3. 无 this,减少上下文错误;
  4. 编译阶段语法糖,性能更好,代码更简洁。

缺点

  1. 入门门槛更高,需要理解 ref/reactive/computed/watch 等响应式API;
  2. 极简小组件会比选项式代码稍多;
  3. Vue2 项目不支持,只能Vue3使用。

对比

维度 选项式API 组合式API(script setup)
代码组织 按类型拆分(数据/方法/生命周期分开) 按业务逻辑聚合(同一功能代码放一起)
复用逻辑 依赖 mixins,存在命名冲突、来源模糊问题 自定义 hooks 抽离逻辑,无冲突,清晰易复用
TypeScript 支持 类型推导弱,复杂场景需额外处理 天然友好,变量类型直接推断
代码体量 简单组件简洁,复杂组件臃肿 大型组件结构清晰,维护成本低
this 指向 大量使用 this,容易丢失上下文 无 this,直接操作变量,不易出错
学习成本 上手简单,Vue2 开发者零门槛 需要掌握响应式API(ref/reactive等)
作用域 所有选项挂载实例,全局互通 变量手动导出到模板,隔离性更好

适用场景

优先用 选项式API

  1. 简单小型组件、弹窗、展示类小组件;
  2. Vue2 老项目维护、快速简单页面;
  3. 新手入门学习,追求极简写法。

优先用 组合式API(<script setup>)

  1. 中大型后台管理系统、复杂业务页面;
  2. 需要大量复用通用逻辑(表单、分页、权限、接口请求);
  3. 使用 TypeScript 开发;
  4. 长期维护、多人协作的项目(官方推荐标准写法)。

官方建议

Vue3 官方推荐新项目统一使用 <script setup> 组合式API;
原有小型简单组件可以保留选项式API,两种写法可以在同一个项目共存,互不冲突。


原文出处:/show_1GW3gMW7odWD.html