第二十七节——组合式API介绍

一、什么是组合式API

组合式API(Composition API)是一系列 API 的集合,使我们可以使用函数而不是声明选项的方式书写 Vue组件。它是一个概括性的术语,涵盖了以下方面的 API:

1、响应式API

例如 ref()和 reactive(),使我们可以直接创建响应式状态、计算属性和侦听器。

2、生命周期钩子

例如 onMounted() 和 onUnmounted(),使我们可以在组件各个生命周期阶段添加逻辑。

3、依赖注入

例如 provide() 和 inject(),使我们可以在使用响应式API时,利用Vue的依赖注入系统。

4、总结

组合式API是Vue 3及 Vue 2.7 的内置功能。对于更老的 Vue 2版本,可以使用官方维护的插件@vue/composition-api 。在Vue3中,组合式API基本上都会配合语法在单文件组件中使用.

二、为什么使用它

1、更好的逻辑复用

组合式 API 最基本的优势是它使我们能够通过组合函数来实现更加简洁高效的逻辑复用。在选项式 API中我们主要的逻辑复用机制是 mixins,而组合式 API 解决了 mixins 的所有缺陷。

组合式 API提供的逻辑复用能力孵化了一些非常棒的社区项目,比如 VueUse,一个不断成长的工具型组合式函数集合。组合式 API 还为其他第三方状态管理库与 Vue 的响应式系统之间的集成提供了一套简洁清晰的机制,例如 RxJS。

2、更灵活的代码组织

许多用户喜欢选项式 API 的原因是因为它在默认情况下就能够让人写出有组织的代码:大部分代码都自然地被放进了对应的选项里。然而,选项式 API 在单个组件的逻辑复杂到一定程度时,会面临一些无法忽视的限制。这些限制主要体现在需要处理多个逻辑关注点的组件中,这是我们在许多 Vue 2 的实际案例中所观察到的。

3、 更好的类型推导

近几年来,越来越多的开发者开始使用 TypeScript 书写更健壮可靠的代码,TypeScript还提供了非常好的IDE开发支持。然而选项式 API是在 2013 年被设计出来的,那时并没有把类型推导考虑进去,因此我们不得不做了一些复杂到夸张的类型体操才实现了对选项式 API的类型推导。但尽管做了这么多的努力,选项式 API 的类型推导在处理 mixins 和依赖注入类型时依然不甚理想。

因此,很多想要搭配TS 使用Vue 的开发者采用了由 vue-class-component 提供的 class APl。然而基于 class 的API非常依赖ES 装饰器,在2019年我们开始开发 Vue 3时,它仍是一个仅处于 stage2的语言功能。我们认为基于一个不稳定的语言提案去设计框架的核心API 风险实在太大了,因此没有继续向 Class API 的方向发展。在那之后装饰器提案果然又发生了很大的变动,在 2022 年才终于到达 stage3。另一个问题是,基于 class 的 API和选项式 API 在逻辑复用和代码组织方面存在相同的限制。

相比之下,组合式 API 主要利用基本的变量和函数,它们本身就是类型友好的。用组合式 API 重写的代码可以享受到完整的类型推导,不需要书写太多类型标注。大多数时候,用TypeScript 书写的组合式 AP代码和用 JavaScript写都差不太多!这也让许多纯 JavaScript 用户也能从IDE 中享受到部分类型推导功能。

4、更小的生产包体积

搭配 <script setup>使用组合式 API比等价情况下的选项式API更高效,对代码压缩也更友好。这是由于 <script setup> 形式书写的组件模板被编译为了一个内联函数,和 <script setup>中的代码位于同一作用域。不像选项式 API需要依赖 this 上下文对象访问属性,被编译的模板可以直接访中定义的变量,无需一个代码实例从中代理。这对代码压缩更友好,因为本地变问 <script setup>量的名字可以被压缩,但对象的属性名则不能。

三、简单例子

<template>
  <div>
    {{ num }}
    <button @click="add">+1</button>
  </div>
</template>
<script setup>
  import { ref } from 'vue'

  const num = ref(1)

  const add = () => {
    num.value += 1
  }

</script>
相关推荐
向前看-12 分钟前
验证码机制
前端·后端
燃先生._.1 小时前
Day-03 Vue(生命周期、生命周期钩子八个函数、工程化开发和脚手架、组件化开发、根组件、局部注册和全局注册的步骤)
前端·javascript·vue.js
高山我梦口香糖2 小时前
[react]searchParams转普通对象
开发语言·前端·javascript
m0_748235242 小时前
前端实现获取后端返回的文件流并下载
前端·状态模式
m0_748240253 小时前
前端如何检测用户登录状态是否过期
前端
black^sugar3 小时前
纯前端实现更新检测
开发语言·前端·javascript
寻找沙漠的人4 小时前
前端知识补充—CSS
前端·css
GISer_Jing4 小时前
2025前端面试热门题目——计算机网络篇
前端·计算机网络·面试
m0_748245524 小时前
吉利前端、AI面试
前端·面试·职场和发展