Vue3经过多个版本的更新迭代已经逐渐的趋于稳定,在看官方的文档中发现了官方所有的文档都有两种格式的API,响应式API和组合式API。
这是官方文档对于响应式API的解释:
使用选项式 API,我们可以用包含多个选项的对象来描述组件的逻辑,例如
data、methods和mounted。选项所定义的属性都会暴露在函数内部的this上,它会指向当前的组件实例。
简单的说就是vue2中的语法,比如在实现一个不怎么复杂的功能中,你需要在data中定于变量,在method中定义函数,在wathc中监听变量值的变化,简单的应用中感觉不到复杂性,在复杂的应用中,大量的代码堆积,代码的可读性和可维护性就会变差。
如下图所示:

引用官方的解释:
组合式 API 的核心思想是直接在函数作用域内定义响应式状态变量,并将从多个函数中得到的状态组合起来处理复杂问题。
组合式 API 是根据逻辑相关性组织代码的,提高可读性和可维护性,基于函数组合的 API 更好的重用逻辑代码(在vue2 Options API中通过Mixins重用逻辑代码,容易发生命名冲突且关系不清)。
最大的优点:通俗的讲就是把跟一个功能相关的东西放在一个地方,它是目前最合理也是最容易维护的,你可以随时将功能的一部分拆分出去,你可以将每一个功能相关所有的东西比如methods,computed都放在如上图的function中,这个function可以独立的存在,可以放在一个TS文件中,也可在npm中单独发布,最终组合式API把他们组合起来。

官方给出的代码对比
选项式API
- export default {
- // data() 返回的属性将会成为响应式的状态
- // 并且暴露在 `this` 上
- data() {
- return {
- count: 0
- }
- },
-
- // methods 是一些用来更改状态与触发更新的函数
- // 它们可以在模板中作为事件监听器绑定
- methods: {
- increment() {
- this.count++
- }
- },
-
- // 生命周期钩子会在组件生命周期的各个不同阶段被调用
- // 例如这个函数就会在组件挂载完成后被调用
- mounted() {
- console.log(`The initial count is ${this.count}.`)
- }
- }
-
- <template>
- <button @click="increment">Count is: {{ count }}button>
- template>
组合式API
- import { ref, onMounted } from 'vue'
-
- // 响应式状态
- const count = ref(0)
-
- // 用来修改状态、触发更新的函数
- function increment() {
- count.value++
- }
-
- // 生命周期钩子
- onMounted(() => {
- console.log(`The initial count is ${count.value}.`)
- })
-
- <template>
- <button @click="increment">Count is: {{ count }}button>
- template>