setup 语法糖核心要点

1. 基本语法

javascript 复制代码
<!-- 传统写法 -->
<script lang="ts">
export default {
  setup() {
    let name = '张三'
    function changeName() { name = '李四' }
    return { name, changeName }
  }
}
</script>

<!-- 语法糖写法 -->
<script setup lang="ts">
let name = '张三'
function changeName() { name = '李四' }
// 无需 return,自动暴露给模板
</script>

2. 关键特性

✅ 自动暴露

  • 顶层变量、函数自动暴露给模板
  • 无需手动 return

✅ 组件自动注册

javascript 复制代码
<script setup>
import Person from './Person.vue'
// 无需在 components 中注册,直接使用
</script>
<template>
  <Person/>  <!-- 直接使用 -->
</template>

✅ 编译器宏?

javascript 复制代码
<script setup>
// Props 定义
const props = defineProps<{ message: string }>()

// Emits 定义  
const emit = defineEmits<{ 'my-event': [data: string] }>()

// 暴露方法给父组件
defineExpose({ publicMethod })
</script>

3. 组件名称问题

问题:<script setup> 无法直接设置组件名

javascript 复制代码
<script setup name="Person">  <!-- ❌ 这样不行 -->

解决方案:使用 Vite 插件

javascript 复制代码
npm i vite-plugin-vue-setup-extend -D
javascript 复制代码
// vite.config.ts
import VueSetupExtend from 'vite-plugin-vue-setup-extend'

export default defineConfig({
  plugins: [vue(), VueSetupExtend()]
})

然后就可以:

javascript 复制代码
<script setup name="Person">  <!-- ✅ 现在可以了 -->

对比总结

| 特性 | 传统 setup() | <script setup> |

|------|-------------|------------------|

| 代码量 | 多(需要 return) | 少(自动暴露) |

| 组件注册 | 需要手动注册 | 自动注册 |

| 类型支持 | 一般 | 优秀 |

| 学习成本 | 中等 | 低 |

一句话总结:<script setup> 是 Vue 3 的"零配置"组合式 API,让组件编写更简洁,但需要插件支持组件命名。

相关推荐
小巧的砖头19 分钟前
C#会重蹈覆辙吗?系列之2:反射及元数据的性能问题
开发语言·前端·c#
凯瑟琳.奥古斯特22 分钟前
力扣1009补码解法C++实现
开发语言·c++·算法·leetcode·职场和发展
KaMeidebaby25 分钟前
卡梅德生物技术快报|蛋白的叠氮基修饰:实操解析:核酸模板耦合蛋白的叠氮基修饰实现靶蛋白定点共价标记
前端·人工智能·物联网·算法·百度
2601_9636459227 分钟前
【2026最新】MATLAB教程(附安装包,非常详细)
开发语言·matlab·信息可视化
濮水大叔36 分钟前
在大型 Vue 项目中,如何有效管理复杂的状态?“散装版” vs “套装版”
前端·vue.js·typescript
玄星啊44 分钟前
可修改:代码的生存底线
前端·ai编程
没落英雄1 小时前
3. DeepAgents 实战 - Memory Skills 与上下文工程
前端·人工智能·架构
Bigger1 小时前
对不起!我错怪你了,UnoCSS:一次和 AI 一起排查 DevTools 卡顿的经历
前端·css·人工智能
闲猫1 小时前
Python 虚拟环境 virtualenv & uvicorn 服务搭建 & FAstAPI 使用
开发语言·python
三月不知肉味y2 小时前
2026-07-05-JAVA面试场景题训练
java·开发语言·面试