我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Vue3中的组合式 API示例详解

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Vue3中的组合式 API示例详解

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

  • 响应性 API:例如ref()reactive(),使我们可以直接创建响应式状态、计算属性和侦听器。
  • 生命周期钩子:例如onMounted()onUnmounted(),使我们可以在组件各个生命周期阶段添加逻辑。
  • 依赖注入:例如provide()inject(),使我们可以在使用响应性 API 时,利用 Vue 的依赖注入系统。

在 Vue 3 中,组合式 API 基本上都会配合<script setup>语法在单文件组件中使用。下面是一个使用组合式 API 的组件示例:

<script setup>
import { ref, onMounted } from 'vue'
// 响应式状态
const count = ref(0)

// 更改状态、触发更新的函数
function increment() {
  count.value++
}
// 生命周期钩子
onMounted(() => {
  console.log(`计数器初始值为 ${count.value}。`)
})
</script>

<template>
  <button @click="increment">点击了:{{ count }} 次</button>
</template>

虽然这套 API 的风格是基于函数的组合,但组合式 API 并不是函数式编程。组合式 API 是以 Vue 中数据可变的、细粒度的响应性系统为基础的,而函数式编程更强调数据不可变。

为什么要有组合式 API?

更好的逻辑复用

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

更灵活的代码组织

许多用户都喜欢选项式 API,因为在默认情况下就能够写出有组织的代码:任何东西都有其对应的选项来管理。然而,选项式 API 在单个组件的逻辑复杂到一定程度时,也面临了一些无法忽视的限制。这些限制主要体现在需要处理多个逻辑关注点的组件中,在许多 Vue 2 已经上线的生产应用中可以看到这一点。

我们以 Vue CLI GUI 中的文件浏览器组件为例:这个组件承担了以下几个逻辑关注点:

  • 追踪当前文件夹的状态,展示其内容
  • 处理文件夹的相关操作(打开、关闭和刷新)
  • 支持创建新文件夹
  • 可以切换到只展示收藏的文件夹
  • 可以开启对隐藏文件夹的展示
  • 处理当前工作目录中的变更

这个组件最原始的版本是由选项式 API 写成的。而如果用组合式 API 重构这个组件,将会变成:

现在与同一个逻辑关注点相关的代码被归为了一组:我们无需再为了一个逻辑关注点在不同的选项块间来回滚动切换。此外,我们现在可以不费吹灰之力地将这一组代码移动到一个外部文件中,不再需要为了抽象而重新组织代码,大大降低了重构成本,这在长期维护的大型项目中非常关键。

更好的类型推导

近几年来,越来越多的开发者开始使用TypeScript书写更健壮可靠的代码,TypeScript还提供了非常好的IDE 开发支持。然而选项式 API 是在 2013

年创建的,那时并没有想到需要进行类型推导。因此我们做了一些荒谬复杂的类型体操来实现对选项式 API 的类型推导。但尽管做了这么多的努力,选项式 API 的类型推导仍然无法适配混入和依赖注入。

因此,很多想要搭配 TS 使用 Vue 的开发者采用了由vue-class-component提供的Class API。然而,基于 Class 的 API 非常依赖 ES 装饰器,在 Vue 2019 年开发完成后,它仍是一个仅处于 vue 2的语言功能。我们认为将这样一种不稳定的方案作为官方 API 的一种实现形式风险过高,在那之后装饰器提案还进行了一些较大的变动,在书写这篇文档时仍未到达 vue 3。另外,基于 Class 的 API 和选项式 API 在逻辑复用和代码组织方面有相同的限制。

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

生产包体积更小

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

与选项式 API 的关系

组合式 API 是否覆盖了所有场景?

对于有状态的逻辑来说,的确如此。当使用组合式 API 时,只需要用到一小部分选项:propsemitsnameinheritAttrs。如果使用<script setup>,那么inheritAttrs应该是唯一一个需要用额外的<script>块书写的选项了。

如果你在代码中只使用了组合式 API(以及上述必需的选项),得益于编译时标记你可以减小生产包大概几 kb 左右的体积,因为丢掉了 Vue 之中关于选项式 API 的所有代码。注意这也会影响你依赖中的 Vue 组件。

可以同时使用两种 API 吗?

可以。你可以在一个选项式 API 组件中使用setup()选项。

然而,我们只推荐你在就旧项目中这样使用。它们长期基于选项式 API 开发、又可能想要集成新的功能,或是想要集成基于组合式 API 的第三方库。

选项式 API 会被废弃吗?

不会,我们没有任何计划这样做。选项式 API 也是 Vue 不可分割的一部分,也有很多开发者喜欢它。我们也意识到组合式 API 主要适用于非常大型的项目,而对于中小型项目来说选项式 API 仍然是一个不错的选择。

到此这篇关于什么是Vue3的组合式 API的文章就介绍到这了,更多相关Vue3组合式 API内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Vue3中的组合式 API示例详解

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

vue3-组合式api-provide/inject详解

provide/inject适用于跨级通信,在孙组件中通过依赖注入的方式能获取到父组件中改变的这个值,下面通过实例代码介绍vue3-组合式api-provide/inject的相关知识,需要的朋友可以参考下
2022-11-13

vue2的$refs在vue3组合式API中的替代方法

这篇文章将为大家详细讲解有关vue2的$refs在vue3组合式API中的替代方法,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。如果你有过vue2的项目开发经验,那么对$refs就很熟悉了。由于vue3的
2023-06-14

Vue3中Composition API的使用示例

这篇文章主要介绍Vue3中Composition API的使用示例,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!vue3.0在7月发布了rc版本,vue-cli4.5后也支持选择vue3作为备选版本可以体验了,vue
2023-06-14

vue3响应式对象的api超全实例详解

可以把数据变成响应式api的方法叫做响应式api,下面这篇文章主要给大家介绍了关于vue3响应式对象api的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
2023-05-19

vue3组合式API中setup()概念和reactive()函数的用法

这篇文章主要介绍了vue3组合式API中setup()概念和reactive()函数的用法,接下来的事件,我将带着你从浅到深分析为什么我们需要学习组合式API以及我们的setup()函数作为入口函数的一个基本的使用方式,需要的朋友可以参考下
2023-05-14

Vue3中其他的Composition API详解

这篇文章主要介绍了Vue3中其他的Composition API,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
2023-03-24

Java 电话号码的组合示例详解

这篇文章主要介绍了Java 电话号码的组合,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
2023-03-13

Vue3搭建组件库开发环境的示例详解

这篇文章给大家分享Vue3搭建组件库开发环境,给大家讲解依次搭建组件库、example、文档、cli,本文内容是搭建组件库的开发环境的过程,感兴趣的朋友跟随小编一起看看吧
2022-11-16

python中API调用的详解与示例

本篇文章给大家带来了关于python的相关知识,其中主要介绍了关于API调用的相关问题,包括了API的调用和数据接口的调用、请求方法、几种常见API调用实例等等内容,下面一起来看一下,希望对大家有帮助。在日常工作中,可能需要结合网上现在的一些API或者公司提供的数据接口来得到相应的数据或者实现对应的功能。 因此API的调用和数据接口的访问都是做数据分析的一个常用操作,如何快速实现API和数据接口的调
2022-06-16

React结合Drag API实现拖拽示例详解

这篇文章主要为大家介绍了React结合Drag API实现拖拽示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
2023-03-06

编程热搜

目录