vue3之选项式 API (Options API)与组合式 API (Composition API)

选项式 API

选项式 API 是 Vue 2 中的传统方式,通过在组件对象中定义多个选项(如 datamethodscomputedmounted 等)来描述组件的逻辑。这些选项所定义的属性都会暴露在 this 上,this 指向当前的组件实例

<template>
  <div>
    <p>{{ fullName }}</p>
    <button @click="updateName">Update Name</button>
  </div>
</template>

<script>
export default {
  data() {
    return {
      firstName: 'John',
      lastName: 'Doe',
    };
  },
  computed: {
    fullName() {
      return `${this.firstName} ${this.lastName}`;
    },
  },
  methods: {
    updateName() {
      this.firstName = 'Jane';
      this.lastName = 'Smith';
    },
  },
  mounted() {
    console.log('Component mounted');
  },
};
</script>

在这个示例中,datacomputedmethodsmounted 都是选项式 API 的一部分,它们定义了组件的状态、计算属性、方法和生命周期钩子。

组合式 API

组合式 API 是 Vue 3 中引入的新方式,通过导入 Vue 的 API 函数(如 refcomputedwatch 等)来描述组件的逻辑。组合式 API 通常与 <script setup> 搭配使用,这个 setup attribute 是一个标识,告诉 Vue 需要在编译时进行一些处理,让我们可以更简洁地使用组合式 API。

涵盖了以下方面的 API:

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

组合式 API 是 Vue 3 及 Vue 2.7 的内置功能。对于更老的 Vue 2 版本,可以使用官方维护的插件 @vue/composition-api

<template>
  <div>
    <p>{{ fullName }}</p>
    <button @click="updateName">Update Name</button>
  </div>
</template>

<script setup>
import { ref, computed } from 'vue';

const firstName = ref('John');
const lastName = ref('Doe');

const fullName = computed(() => {
  return `${firstName.value} ${lastName.value}`;
});

const updateName = () => {
  firstName.value = 'Jane';
  lastName.value = 'Smith';
};
</script>

在这个示例中,我们使用了 <script setup> 和组合式 API。ref 用于定义响应式状态,computed 用于定义计算属性,updateName 是一个普通的函数。所有这些变量和函数都可以在模板中直接使用。

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

选项式 API vs 组合式 API

特性选项式 API组合式 API
代码组织通过选项分组(data, methods 等)通过逻辑分组(组合相关逻辑)
this 绑定需要使用 this 访问组件实例不需要 this,直接使用变量
类型推断需要手动添加类型更好地支持 TypeScript 类型推断
代码复用通过 mixins 和继承通过组合函数(composables)
学习曲线对 Vue 2 用户更友好对新用户可能有些复杂

组合式 API 的优势

  1. 更好的代码组织:可以将相关逻辑组合在一起,而不是分散在不同的选项中。
  2. 更好的类型推断:组合式 API 更好地支持 TypeScript,提供更好的类型推断。
  3. 更灵活的代码复用:可以通过组合函数(composables)来复用逻辑,而不是依赖 mixins 和继承。
  4. 更简洁的语法:使用 <script setup> 可以让代码更简洁,减少样板代码。

可以在同一个组件中使用两种 API 吗?​

可以。可以在一个选项式 API 的组件中通过 setup() 选项来使用组合式 API。

然而,只推荐你在一个已经基于选项式 API 开发了很久、但又需要和基于组合式 API 的新代码或是第三方库整合的项目中这样做。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小鱼爱吃火锅

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值