vue3中setup方法和setup语法糖的区别

343 阅读3分钟

vue3中setup方法和setup语法糖的区别

在 Vue 3 中,setup 方法和 <script setup> 语法糖是两种不同的编写组件逻辑的方式。它们都用于 Composition API,但在语法和使用方式上有一些区别。以下是它们的详细对比:

  1. setup 方法

setup 方法是 Vue 3 Composition API 的核心函数,用于替代 Vue 2 的 datamethodscomputed 等选项。

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

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

    const doubleCount = computed(() => count.value * 2);

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

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

特点:

显式返回

  • 需要在 setup 函数中显式返回模板中使用的变量和方法。

  • 例如:return { count, doubleCount, increment };

Options API 兼容

  • 可以与 Options API(如 datamethods)混用,但不推荐。

灵活性

  • 适合需要动态逻辑或复杂场景的组件。

代码结构

  • 代码逻辑集中在 setup 函数中,但需要手动返回变量和方法。
  1. <script setup> 语法糖

<script setup> 是 Vue 3.2 引入的语法糖,用于简化 Composition API 的使用。

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

const count = ref(0);

const doubleCount = computed(() => count.value * 2);

function increment() {
  count.value++;
}
</script>

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

特点:

隐式返回

  • <script setup> 中声明的变量和函数会自动暴露给模板,无需显式返回。

  • 例如:countdoubleCountincrement 可以直接在模板中使用。

更简洁

  • 代码更简洁,减少了模板和逻辑之间的样板代码。

更好的 TypeScript 支持

  • 对 TypeScript 的支持更好,类型推断更智能。

更高效的编译

  • Vue 编译器会对 <script setup> 进行优化,生成更高效的代码。

限制

  • 不能与 Options API 混用。

  • 需要 Vue 3.2 或更高版本。

  1. setup 方法与 <script setup> 的对比
特性setup 方法<script setup> 语法糖
语法需要在 setup 函数中编写逻辑直接在 <script setup> 中编写逻辑
返回变量和方法需要显式返回(return)自动暴露,无需显式返回
代码简洁性代码较多,需要手动返回代码更简洁,减少样板代码
TypeScript 支持支持,但类型推断较弱支持,类型推断更智能
Options API 兼容可以混用 Options API不能混用 Options API
编译优化无特殊优化编译器会进行优化,生成更高效代码
适用场景复杂逻辑或动态场景大多数场景,尤其是简单组件
  1. 如何选择?
  • 使用 <script setup>

    • 大多数情况下推荐使用 <script setup>,因为它更简洁、更高效,且对 TypeScript 支持更好。

    • 适合新项目或不需要与 Options API 混用的场景。

  • 使用 setup 方法

    • 如果需要与 Options API 混用,或者需要更灵活的逻辑控制,可以使用 setup 方法。

    • 适合需要动态逻辑或复杂场景的组件。

  1. 示例对比

使用 setup 方法

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

export default {
  setup() {
    const count = ref(0);
    const doubleCount = computed(() => count.value * 2);

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

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

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

使用 <script setup>

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

const count = ref(0);
const doubleCount = computed(() => count.value * 2);

function increment() {
  count.value++;
}
</script>

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

总结

  • setup 方法:更灵活,适合复杂场景,但代码较多。

  • <script setup>:更简洁、高效,适合大多数场景,尤其是新项目。

更多vue相关插件及后台管理模板可访问vue admin reference,代码详情请访问github