当前位置: 首页 > news >正文

<script setup>和export default { setup() { ... } }区别

在 Vue 3 组合式 API(Composition API)中,<script setup>export default setup() {} 都用于定义组件的逻辑,但它们有一些重要的区别:


1️⃣ <script setup>(推荐)

更简洁、性能更优,Vue 推荐使用
不需要 return,变量和方法可以直接在模板中使用
语法更简洁,没有 export default 也没有 setup() 函数

示例:

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

const count = ref(0);
const increment = () => {
  count.value++;
};
</script>

<template>
  <button @click="increment">Count: {{ count }}</button>
</template>

🔹 为什么更高效?

  • Vue 在编译阶段 处理 setup 逻辑,去掉了 setup() 的额外调用层,提高运行时性能。
  • 变量和方法 直接暴露 给模板,无需 return

2️⃣ export default { setup() { ... } }

适用于需要 name 选项、组件选项(componentsprops)的情况
适用于 script setup 无法处理的某些场景(比如 mixins
写法更冗长,必须 return 变量和方法

示例:

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

export default {
  setup() {
    const count = ref(0);
    const increment = () => {
      count.value++;
    };

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

<template>
  <button @click="increment">Count: {{ count }}</button>
</template>

3️⃣ 区别总结

特性<script setup>export default setup()
语法更简洁,无 setup()需要 setup()return
性能更高效(编译优化)稍差,多了一层函数调用
变量和方法使用直接使用,无需 return必须 return 变量和方法
组件选项(propsemits直接定义通过 setup(props, context) 访问
适用场景推荐,默认使用需要 mixinsname 等选项时

4️⃣ 什么时候用 export default setup()

尽管 <script setup>推荐方式,但 export default { setup() { ... } } 在一些特殊情况下仍然有用:

  • 如果组件需要 name(比如 Vue DevTools 需要 name 识别组件)
  • 如果使用 mixinsextends
  • 如果需要 beforeCreatecreated 这些选项式 API
  • 如果是 Vue 2 迁移过来的项目

示例:

<script>
export default {
  name: "MyComponent",
  setup() {
    const message = ref("Hello Vue 3");
    return { message };
  }
};
</script>

✅ 结论

👉 如果没有特殊需求,优先使用 <script setup>,它更简洁、更高效,也是 Vue 3 推荐的写法。
👉 如果需要 namemixins、选项式 API,就用 export default { setup() {} }

相关文章:

  • Express + MongoDB 实现登录验证码
  • 如何在 JavaScript 中冻结对象:深入理解 Object.freeze() 和深冻结
  • 基于信息化技术的农业大学教师人事管理系统的构建与应用
  • C语言中的选择结构:决策的艺术
  • doris:ClickHouse
  • VAD入门(基于Python)
  • 提升数据库性能与可靠性:深入解析MySQL主从复制
  • 使用 Prim 算法生成了最小生成树, 使用 Fleury 算法生成了欧拉回路,尝试找到了一个简单的哈密尔顿圈。
  • 用友 U8出入库查询SQL 连接UNION ALL
  • 1.12.信息系统的分类【ES】
  • C#编译自动增加文件的版本号
  • Ubuntu 下 nginx-1.24.0 源码分析 - conf_ctx
  • NO.24十六届蓝桥杯备战|二维数组八道练习|杨辉三角|矩阵(C++)
  • IDEA 的 EasyCode 插件使用指南:从入门到自定义模板
  • Docker基础篇——Ubuntu下Docker安装
  • 多条件查询--java算法
  • OkHttp:工作原理 拦截器链深度解析
  • 垂直领域大模型优化:从“通用”到“专精”——打造医疗、金融、法律领域的AI专家
  • 解决stylelint对deep报错
  • C++:string容器(下篇)
  • 南宁网站推广公司/大数据培训机构排名前十
  • 山东省建设局注册中心网站/英文网站建设
  • 河南微网站开发/网推是干什么的
  • 网站建设 从用户角度开始/新品牌推广策划方案
  • 品牌红酒网站建设/推广百度百科
  • 永康高端网站建设/推广网站制作