Vue中Composition API和Options API的区别
在 Vue 2 之前,有一种方法可以在 Vue 中创建组件。在 Vue 3 中,引入了一种称为 Composition API 的新方法。现在,如果我们想在 Vue 中制作一个组件,我们有两种方法可以做到。您可能想知道到底有什么区别,所以让我们看看新的 Composition API 与 Vue 2 方法(现在称为 Options API)有何不同
Vue中的Composition和Options API有什么区别?
简短的回答是语法。组合 API 允许我们创建组件,而无需像选项 API 中那样的大型单个可导出对象。例如,如果我们想用 Options API 制作一个简单的计数器组件,它看起来像下面的代码。
选项 API
<template>
<h1>{{ counter }}</h1>
<button @click="incrCounter">Click Me</button>
</template>
<script>
export default {
data() {
return {
counter: 0
}
},
methods: {
incrCounter: function() {
this.counter += 1;
}
}
}
</script>
进入全屏模式 退出全屏模式
相反,如果我们想用 Composition API 编写相同的代码,它应该是这样的。
组合API
<template>
<h1>{{ counter }}</h1>
<button @click="incrCounter">Click Me</button>
</template>
<script setup>
import { ref } from 'vue'
let counter = ref(0);
const incrCounter = function() {
counter.value += 1;
}
</script>
进入全屏模式 退出全屏模式
您会注意到一些不同之处:
-
我们导入了一个叫做
ref
的东西——这让我们可以创建反应变量 -
当我们增加计数器时,我们实际上增加了
counter.value
,因为ref
返回一个对象。 -
我们避免使用整个原型,而是只使用一个
incrCounter
函数
组合 API 中的反应性
除了ref
,我们还可以将reactive
用于对象。这两者都赋予变量反应能力,这意味着我们不会失去任何功能。
组合 API 的好处
如您所见,组合 API 比选项 API 更加精简,并且需要的代码也少很多。它还具有 compartmentalizing 代码的额外好处。让我们考虑一个带有两个计数器的愚蠢示例 - 一个按钮将输出增加 1,另一个按钮增加 2。在 Options API 中,我们可以这样写:
<template>
<h1>{{ counter }}, {{ doubleCounter }} </h1>
<button @click="incrCounter">Click Me</button>
<button @click="increaseByTwo">Click Me For 2</button>
</template>
<script>
export default {
data() {
return {
counter: 0,
doubleCounter: 0
}
},
methods: {
incrCounter: function() {
this.counter += 1;
},
increaseByTwo: function() {
this.doubleCounter += 2;
}
}
}
</script>
进入全屏模式 退出全屏模式
另一方面,在 Components API 中,它可能如下所示:
<template>
<h1>{{ counter }}, {{ doubleCounter }} </h1>
<button @click="incrCounter">Click Me</button>
<button @click="increaseByTwo">Click Me For 2</button>
</template>
<script setup>
import { ref } from 'vue'
let counter = ref(0);
const incrCounter = function() {
counter.value += 1;
}
let doubleCounter = ref(0);
const increaseByTwo = function() {
doubleCounter.value += 2;
}
</script>
进入全屏模式 退出全屏模式
差别很小,但您可能会注意到一些有趣的事情 - 在 Composition API 上,所有相关代码都紧密相连,因此您不必抱太大希望。在下图中,您可以看到具有相似功能的代码以相同的颜色突出显示。
在右侧,Composition API 将其代码全部保存在同一个位置。在小型项目上,这并没有太大的区别——但在大型项目上,可维护性会提高。
[](https://res.cloudinary.com/practicaldev/image/fetch/s--KzgsE3Yl--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev -to-uploads.s3.amazonaws.com/uploads/articles/mriitco6qwevekq393ln.png)
组合 API 的其他好处
-
替换 mixins,以及随之而来的名称冲突等所有问题。
-
更好的类型支持,因为它主要使用普通的函数和变量,所以在 TypeScript 中不需要复杂的类型。
-
更小的文件 - 如前所述,Composition API 需要更少的代码。
我现在需要使用 Composition API 吗?
不! 如果 Options API 仍然适合您,则没有理由将您的代码切换到 Composition API。 Options API 没有任何意义,而 Composition API 提供了另一种创建 Vue 组件的方法。
在某些情况下,Options API 可能仍然是您更好的选择(双关语并非有意)。
组合 API 是否优于选项 API?
这个问题没有简单的答案。这两种方法都有其优点,它们在某些情况下可能很有用。无论您决定使用什么都很好,但是 Composition API 确实解决了 Options API 带来的一些问题。
更多推荐
所有评论(0)