正如你所期望的那样,Vue 3带来了很多令人兴奋的新功能。值得庆幸的是,Vue团队主要是在当前API的基础上引入了一些补充和改进,而不是进行重大更改,所以已经了解Vue 2的人应该很快就会对新的语法感到适应。

让我们从你们大多数人可能听说过的API开始吧......

Composition API

Composition API是Vue的下一个主要版本中最常用的讨论和特色语法。这是一种全新的逻辑重用和代码组织方法·

当前,我们使用所谓的Options API构建组件。为了向Vue组件添加逻辑,我们填充(选项)属性,例如数据,方法,计算的等。这种方法的最大缺点是,这本身并不是有效的JavaScript代码。您需要确切了解模板中可以访问哪些属性,以及此关键字的行为。在后台,Vue编译器需要将此属性转换为工作代码。因此,我们无法从自动建议或类型检查中受益。

Composition API的目的是通过将当前可用组件属性作为JavaScript函数暴露出来的机制来解决这个问题。Vue核心团队将Composition API描述为“一组基于功能的附加API,可以灵活地组合组件逻辑”。使用 Composition API 编写的代码更易读,而且没有任何幕后的魔力,更容易阅读和学习。

让我们来看看一个非常简单的例子,看看使用新的Composition API的组件是如何工作的。

<template>
<button @click="increment">
Count is: {{ state.count }}, double is: {{ state.double }}
</button>
</template> <script>
import { reactive, computed } from 'vue' export default {
setup() {
const state = reactive({
count: 0,
double: computed(() => state.count * 2)
}) function increment() {
state.count++
} return {
state,
increment
}
}
}
</script>

现在,让我们把这段代码分解成几段,以了解发生了什么事

import { ref, computed, onMounted } from 'vue'

正如我之前提到的Component API是以函数的形式展示组件属性,所以第一步就是导入我们需要的函数。在我们的例子中,我们需要用 ref创建reactive reference,用 computed 创建computed属性,用onMounted访问mounted的挂载生命周期钩子。·

现在你可能会想知道这个神秘的 setup 方法是什么?

export default {
setup() {}
}

简而言之,它只是一个函数,向模板返回属性和函数。就是这样。我们在这里声明所有的反应式属性、计算属性、watchers和生命周期钩子,然后返回它们,这样它们就可以在模板中使用。·

我们没有从setup函数中返回的东西将不能在模板中使用

const count = ref(0)

根据上面的内容,我们用ref函数声明了一个叫count的反应式属性。它可以包裹任何基元或对象,并返回它的反应式引用。传入的元素的值将被保存在创建的引用的value属性中。例如,如果你想访问count引用的值,你需要显式请求count.value。

const double = computed(() => count.value * 2)

function increment() {
count.value++
}

而这正是我们在声明计算属性双倍和增量函数时所做的

onMounted(() => console.log('component mounted!'))

当组件被挂载时,我们用onMounted钩子记录一些消息,只是为了让你知道你可以 simle

return {
count,
double,
increment
}

最后我们用 increment 方法返回 count 和 double 属性,使其在模板中可用

<template>
<button @click="increment">
Count is: {{ count }}, double is {{ double }}. Click to increment.
</button>
</template>

现在我们可以像以前的Options API一样,在模板中访问由setup方法返回的属性和函数

这是一个简单的例子,用Options API也可以很容易实现。新的Composition API的真正好处不仅仅是以不同的方式编码,当涉及到重用我们的代码/逻辑时,好处就会显现出来

使用Composition API重用代码

新的Composition API有更多的优势。考虑到代码的重用。目前,如果我们想在其他组件之间共享一些代码,有两种选择----mixins和scoped slots。这两种方案都有其缺点。

假设我们想提取 counter 的功能,并在其他组件中重用。下面你可以看到它如何与可用的API和新的Component API一起使用

让我们从mixins开始说起

import CounterMixin from './mixins/counter'

export default {
mixins: [CounterMixin]
}

mixins最大的缺点是,我们对它究竟在我们的组件中加入了什么东西一无所知。这使得它不仅难以推理,而且还可能导致与现有的属性和函数的名称碰撞。·

这时候就到了加scoped slots的时候了

<template>
<Counter v-slot="{ count, increment }">
{{ count }}
<button @click="increment">Increment</button>
</Counter>
</template>

有了scoped slots,我们就可以通过v-slot属性准确地知道我们可以通过v-slot属性访问哪些属性,这样就更容易理解代码了。这种方法的缺点是,我们只能在模板中访问,而且只能在Counter组件作用域中使用

现在是Composition API的时候了

function useCounter() {
const count = ref(0)
function increment () { count.value++ } return {
count,
incrememt
}
} export default {
setup () {
const { count, increment } = useCounter()
return {
count,
increment
}
}
}

更加优雅了,不是吗?我们不受模板和组件范围的限制,可以准确地知道我们可以从counter中访问哪些属性。此外,我们还可以从编辑器中的代码完成中受益,因为useCounter只是一个返回一些属性的函数。在幕后没有什么魔法,所以编辑器可以帮助我们进行类型检查和建议。

这也是一种比较优雅的使用第三方库的方式。例如,如果我们想使用Vuex,我们可以显式使用Store函数,而不是污染Vue原型(this.$store)。这种方法也消除了Vue插件的幕后魔法

const { commit, dispatch } = useStore()

如果你想了解更多关于Composition API和它的用例,我强烈推荐你阅读Vue团队的这篇文档,它解释了新的API背后的原因,并推荐了它的最佳用例。还有一个很好的资源库,里面有Vue核心团队的Thorsten Lünborg提供的Composition API使用案例

以上示例来自:https://composition-api.vuejs.org/#basic-example

Vue 3.0 中令人激动的新功能:Composition API的更多相关文章

  1. 【译】.NET 5. 0 中 Windows Form 的新特性

    自从 Windows Form 在 2018 年底开源并移植到 .NET Core 以来,团队和我们的外部贡献者都在忙于修复旧的漏洞和添加新功能.在这篇文章中,我们将讨论 .NET 5.0 中 Win ...

  2. Android开发之清除缓存功能实现方法,可以集成在自己的app中,增加一个新功能。

    作者:程序员小冰,CSDN博客:http://blog.csdn.net/qq_21376985 Android开发之清除缓存功能实现方法,可以集成在自己的app中,增加一个新功能. 下面是一个效果图 ...

  3. [译] OpenStack Ocata 版本中的 53 个新功能盘点

    原文链接:https://www.mirantis.com/blog/53-new-things-to-look-for-in-openstack-ocata/ 原文作者:Nick Chase, Ra ...

  4. 优秀个人免费私有云OwnCloud 8.0终于发布 - 亮眼新功能初探简介

    OwnCloud是一个基于Linux的私有云开源项目,用户可以免费使用它来搭建自己的私有云来进行文件和多媒体等的分享. 本人有幸在大概一年多前因为项目需要而接触和使用到OwnCloud,但不幸的是当时 ...

  5. [译] OpenStack Pike 版本中的 53 个新功能盘点

      原文:https://www.mirantis.com/blog/53-things-to-look-for-in-openstack-pike/ 作者:Mirantis Nick Chase 发 ...

  6. 微软Blazor组件发布,DevExpress v19.1.8中可用:Charts新功能

    点击获取DevExpress v19.2.3最新完整版试用下载 DevExpress UI for Blazor在v19.1.8中可用,此次更新发布包括DevExpress Blazor组件的主要功能 ...

  7. Android 9 新功能 及 API 介绍(提供了实用的模块化的功能支持,包括 人工智能)

      Android 9(API 级别 28)为用户和开发者引入了众多新特性和新功能. 本文重点介绍面向开发者的新功能. 要了解新 API,请阅读 API 差异报告或访问 Android API 参考. ...

  8. [UWP小白日记-12]使用新的Composition API来实现控件的阴影

    前言 看了好久官方的Windows UI Dev Labs示例好久才有点心得,真是头大.(其实是英语幼儿园水平(⊙﹏⊙)b) 真的网上关于这个API的资料可以说几乎没有. 正文 首先用这东西的添加WI ...

  9. Android5.0中Material Design的新特性

    最近项目中需要用到Material Design,整理了下面几个常用的控件,以便记忆. 一.Snackbar 1.作用:与Toast类似,但是可以点击监听: 2.使用: (1)Snackbar调用静态 ...

随机推荐

  1. 手把手教你使用Python网络爬虫获取招聘信息

    1.前言 现在在疫情阶段,想找一份不错的工作变得更为困难,很多人会选择去网上看招聘信息.可是招聘信息有一些是错综复杂的.而且不能把全部的信息全部罗列出来,以外卖的58招聘网站来看,资料整理的不清晰. ...

  2. Go语言入门系列(四)之map的使用

    本系列前面的文章: Go语言入门系列(一)之Go的安装和使用 Go语言入门系列(二)之基础语法总结 Go语言入门系列(三)之数组和切片 1. 声明 map是一种映射,可以将键(key)映射到值(val ...

  3. Ant Design Pro V5 从服务器请求菜单(typescript版)

    [前言] 找了很多Admin模板,最后还是看中了AntDesignPro(下文简写antd pro)这个阿里巴巴开源的Admin框架,长这样(还行吧,目前挺主流的): 官网地址:https://pro ...

  4. CSS 定位总结

    目录 元素显示模式 元素模式 元素显示模式转换 CSS定位机制 静态定位static 相对定位relative 绝对定位absolute 固定定位fixed 粘性定位sticky 定位小结一图流 CS ...

  5. C#LeetCode刷题之#326-3的幂(Power of Three)

    问题 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/3867 访问. 给定一个整数,写一个函数来判断它是否是 3 的幂次 ...

  6. 计算机网络要点---Http

    计算机网络要点---Http 1.工作流程 一次HTTP操作称为一个事务,其工作过程可分为四步: 首先客户机与服务器需要建立 TCP 连接.只要单击某个超级链接,HTTP的工作开始. 建立连接后,客户 ...

  7. 设计模式:装饰者模式介绍及代码示例 && JDK里关于装饰者模式的应用

    0.背景 来看一个项目需求:咖啡订购项目. 咖啡种类有很多:美式.摩卡.意大利浓咖啡: 咖啡加料:牛奶.豆浆.可可. 要求是,扩展新的咖啡种类的时候,能够方便维护,不同种类的咖啡需要快速计算多少钱,客 ...

  8. Linux 实现密钥免密登录

    Linux 实现密钥免密登录 环境:CentOS 7 一. 创建密钥 登录Linux,进入/root/.ssh/目录下 执行ssh-keygen -t rsa创建密钥一直回车即可,因为是免密所以直接回 ...

  9. CODING DevOps 微服务项目实战系列最后一课,周四开讲!

    随着软件工程越来越复杂化,如何在 Kubernetes 集群进行灰度发布成为了生产部署的"必修课",而如何实现安全可控.自动化的灰度发布也成为了持续部署重点关注的问题.CODING ...

  10. 9.hbase相关进程作用

    1.协调服务组件Zookeeper Zookeeper的作用如下: 1. 保证任何时候,集群中只有一个HMaster: 2. 存储所有的HRegion的寻址入口: 3. 实时监控HRegionServ ...