详解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,也是十分友好的。

相关推荐
丫丫72373411 小时前
Raycaster(鼠标点击选中模型)
javascript·webgl
北慕阳11 小时前
选择采购单按钮
前端·javascript·数据库
华仔啊11 小时前
Vite 到底能干嘛?为什么 Vue3 官方推荐它做工程化工具?
前端·javascript·vue.js
悟能不能悟11 小时前
目前流行的前端框架
开发语言·javascript·ecmascript
计算机学姐11 小时前
基于Python的智能点餐系统【2026最新】
开发语言·vue.js·后端·python·mysql·django·flask
赵庆明老师11 小时前
NET 中深度拷贝一个对象
前端·javascript·ui
北友舰长11 小时前
基于Springboot+vue大型商场应急预案管理系统的设计与实现【Java毕业设计·安装调试·代码讲解·文档报告】
java·vue.js·spring boot·mysql·商场·应急处理·应急
馬致远11 小时前
Vue 脚手架&环境配置
前端·javascript·vue.js
syt_101311 小时前
grid布局之-子项放置1
前端·javascript·css
一字白首11 小时前
Vue 项目实战,从组件缓存到 Vant UI 集成:项目初始化全流程
vue.js·ui·缓存