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

相关推荐
遂心_6 小时前
JavaScript 函数参数传递机制:一道经典面试题解析
前端·javascript
Gracemark7 小时前
高德地图-地图选择经纬度问题【使用输入提示-使用Autocomplete进行联想输入】(复盘)
vue.js
大模型教程7 小时前
8GB显存笔记本能跑多大AI模型?这个计算公式90%的人都不知道!
程序员·llm·agent
遂心_7 小时前
深入理解 React Hook:useEffect 完全指南
前端·javascript·react.js
大模型教程7 小时前
大模型应用开发到底有多赚钱?看完这5个真实案例,你会惊掉下巴
程序员·llm·agent
AI大模型7 小时前
别乱装!Ollama×DeepSeek×AnythingLLM一键本地AI知识库,快人10倍
程序员·llm·agent
前端Hardy7 小时前
HTML&CSS: 谁懂啊!用代码 “擦去”图片雾气
前端·javascript·css
前端Hardy7 小时前
HTML&CSS:好精致的导航栏
前端·javascript·css
天下无贼8 小时前
【手写组件】 Vue3 + Uniapp 手写一个高颜值日历组件(含跨月补全+今日高亮+选中状态)
前端·vue.js
一个不爱写代码的瘦子8 小时前
迭代器和生成器
前端·javascript