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

<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() {} }


http://www.kler.cn/a/577951.html

相关文章:

  • 计算机网络-服务器模型
  • pom.xml配置(mybatisplus增删改查实现;PageInfo分页实现;JSONObject实现)
  • Redis 内存淘汰策略深度解析
  • LeetCode - 28 找出字符串中第一个匹配项的下标
  • MySQL 主主复制与 Redis 环境安装部署
  • PHP之数组
  • 【Git】删除文件
  • 用了主键索引反而查询慢?深度解析SQL性能反常识现象
  • git本地仓库链接远程仓库
  • ApoorvCTF Rust语言逆向实战
  • Docker 部署 MongoDB 并持久化数据
  • Android A/B System OTA分析提取 payload 在ZIP包中的 offset 和 size
  • 深度学习语义分割数据集全景解析
  • 股票交易所官方api接口有哪些?获取和使用需要满足什么条件
  • linux安装OpenResty
  • 编译Telegram Desktop
  • hbase的主要功能
  • 树莓派5首次开机保姆级教程(无显示器通过VNC连接树莓派桌面)
  • 源码:用Python进行电影数据分析实战指南
  • Monica国内版深度测评:全能AI助手如何重塑你的智能生活?