Vue 3新特性大解密:Options API vs. Composition API,谁才是实力派?

923 阅读3分钟

cover.png 在Vue 2中,我们可以使用 Options API 来编写 Vue 组件。但是,在 Vue 3中,我们还有了新的 Composition API。那么这两种API有什么区别呢?在本文中,我们将讨论它们之间的异同点。

Options API

首先,让我们回顾一下 Options API。在Vue 2中,我们通常使用以下方式定义一个组件:

<template>
  <div>
    <p>{{ message }}</p>
    <button @click="increment">Increment</button>
  </div>
</template>

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

在栗子中,我们使用 data 属性定义组件的状态,使用 methods 属性定义组件的方法。我们还可以使用 computed 属性来计算派生状态。此外,还有其他选项,如 watchprops 等。

Composition API

现在,让我们看看 Composition API。在Vue 3中,我们可以通过 setup 函数和 reactive 函数来使用 Composition API。以下是一个使用 Composition API 的栗子组件:

<template>
  <div>
    <p>{{ message }}</p>
    <button @click="increment">Increment</button>
  </div>
</template>

<script>
import { reactive } from "vue";

export default {
  setup() {
    const state = reactive({
      message: "Hello Vue!",
      count: 0
    });

    function increment() {
      state.count++;
    }

    return {
      message: state.message,
      increment
    };
  }
};
</script>

在栗子中,我们使用 reactive 函数来创建响应式对象。我们还可以使用其他函数来创建计算属性、监听器等。

区别

那么,Options APIComposition API 有什么区别呢?以下是几个主要区别:

1. 组织代码的方式

Options API 通过将相关选项分组来组织代码。例如,data 属性包含组件的状态,methods 属性包含组件的方法。这种方式简单直观,容易理解。

Composition API 则通过将逻辑组合成可重用的功能来组织代码。这种方式可以让我们更好地重用和测试代码,但也需要一定的学习曲线。

2. 数据的定义

Options API 中,我们使用 data 属性来定义组件的状态。在 Composition API 中,我们使用 reactive 函数来创建响应式对象。这使得在 Composition API 中定义数据更加灵活,因为我们可以将多个状态组合成一个响应式对象。

3. 生命周期钩子

Options API 中,我们可以使用生命周期钩子函数来处理组件的生命周期事件。在 Composition API 中,我们可以使用onMountedonUpdatedonUnmounted 等函数来处理生命周期事件。

4. 组件实例

Options API 中,组件实例可以通过 this 访问。在 Composition API 中,我们需要使用特殊的函数(如 ref)来创建组件实例。这使得在 Composition API 中操作组件实例稍微有些不同。

总结

Options APIComposition API 都可以用来编写 Vue 组件。它们之间的选择取决于你的个人偏好和项目需求。如果你习惯了 Options API,那么在 Vue 2 的项目中继续使用它也没有问题。如果你希望编写更加模块化、灵活的代码,那么可以尝试一下Composition API。无论你选择哪种方式,Vue 3 都为你提供了更多的选项,使得你可以根据自己的需求选择最佳的编程方式。

希望本文对理解 Options APIComposition API 有所帮助。如果你想深入了解 Vue 3 的 Composition API,建议查看官方文档并进行实践。

下面是一个使用 Composition API 的计数器栗子:

<template>
  <div>
    <p>Count: {{ count }}</p>
    <button @click="increment">Increment</button>
    <button @click="reset">Reset</button>
  </div>
</template>

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

export default {
  setup() {
    const count = ref(0);

    function increment() {
      count.value++;
    }

    function reset() {
      count.value = 0;
    }

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

在栗子中,我们使用了 ref 函数来创建计数器的初始值。我们还定义了 incrementreset 函数来增加和重置计数器的值。最后,我们将所有的状态和函数返回给模板以供使用。

希望这个栗子能够帮助你更好地理解 Composition API 的使用方式。

更多题目

juejin.cn/column/7201…