详解vue中的Options API和Composition API

前言

在vue中两种主要的 API 设计风格,分别是 Options APIComposition API。它们分别用于组织和管理组件的逻辑. 下面我来分别介绍一下这两种API的使用及区别

Options API

首先Options API是vue2中主要使用的API设计方式。它基于选项对象,将组件的配置分解为一系列的选项。每个选项对应于组件的不同功能,例如数据 (data)、生命周期钩子 (createdmounted 等)、方法 (methods) 等。但是这种开发方式在面对复杂组件时可能导致选项过多,难以维护。

示例

vue 复制代码
<template>
  <div>
    <p>{{ message }}</p>
     <p>{{ count }}</p>
    <button @click="increment">Increment</button>
  </div>
</template>

<script>
export default {
  data() {
    return {
      message: 'Hello, Vue!',
      count: 0
    };
  },
  methods: {
    increment() {
      this.count++;
    }
  }
}
</script>

在上面这个示例中,在template部分,我们进行了数据绑定的操作,分别显示组件中的 messagecount 数据。并通过@click="increment" 监听按钮的点击事件,当按钮被点击时触发 increment 方法。

在 Options API 中,使用 data 选项来定义组件的数据,使用 methods 选项来定义组件的方法。在这个示例中,我们通过设计messagecount 的数据属性,通过 data 方法返回初始化的值;并通过increment 的方法,在按钮点击时将 count 的值加一。总的来说,在这个示例中,通过 data 选项定义数据,通过 methods 选项定义方法,然后在模板中进行数据绑定和事件绑定,构建了一个简单的计数器组件。

Composition API

Composition API是vue3中设计api的设计方法。他的目的是解决 Options API 的一些缺点,提供更灵活、可组合的组件逻辑复用。它基于函数,将组件逻辑划分为一组功能相关的函数,这些函数可以在组件中被自由组合和复用。Composition API 使用 setup 函数来组织组件逻辑。

示例

vue 复制代码
<template>
  <div>
    <p>{{ message }}</p>
    <p>Count:{{ count }}</p>
    <button @click="increment">Increment</button>
  </div>
</template>

<script>
import { ref } from 'vue';

export default {
  setup() {
    const message = ref('Hello, Vue!');
    const count = ref(0);

    const increment = () => {
      count.value++;
    };

    return { message, count, increment };
  }
}
</script>

上面的示例中,在template部分,我们进行了与Option API一样的操作,都进行了数据绑定和事件绑定。不同的是,在script中,Composition API 中引入了 setup 函数,用于设置组件的配置。在 setup 函数内部,可以使用 Composition API 提供的函数,并提供了 ref 函数,用于创建响应式对象。

总的来说,这个示例展示了 vue3中 Composition API 的用法,通过 setup 函数和响应式函数(ref)来组织组件逻辑。这种方式相对于 vue2 Options API 更加灵活,特别适用于大型组件和逻辑的复用。

结语

两者的优劣比较:

在逻辑组织和逻辑复用方面,Composition API是优于Options API,因为Composition API几乎是函 数,会有更好的类型推断。 Composition API对 tree-shaking 友好,代码也更容易压缩。 Composition API中见不到this的使用,减少了this指向不明的情况。 如果是小型组件,可以继续使用Options API,也是十分友好的。

相关推荐
To_OC27 分钟前
从 “卡死半天” 到 “打字机效果”:大模型流式输出前端实现全记录
前端·javascript·llm
rockey62734 分钟前
基于AScript的JavaScript脚本语言发布啦
javascript·c#·.net·js·script
kyriewen1 小时前
我看完这篇安全论文——AI推荐的npm包,92%是编出来的
前端·javascript·ai编程
凌虚2 小时前
AI 时代,程序员会消失吗?
人工智能·后端·程序员
心中有国也有家2 小时前
AtomGit Flutter 鸿蒙客户端:Canvas 绘制进阶-路径、渐变与混合模式
android·javascript·flutter·华为·harmonyos
鹿目3 小时前
使用 Vant CLI 搭建 UI 组件库:从 H5 到小程序跨平台
前端·javascript
默_笙3 小时前
😭 我花了两小时找了一个数据结构 bug,才把"迷你 Cursor"跑起来,绝望(bushi)
前端·javascript
竹林8184 小时前
wagmi v2 监听合约事件踩坑记:从 `useContractEvent` 到 `watchContractEvent`,我重构了三版才搞定实时数据流
前端·javascript
xingcheng5 小时前
Vue 2 + JavaScript编码规范skill
javascript
Larcher5 小时前
从零实现一个可运行的 RAG - LangChain、内存向量库与检索增强生成
前端·javascript