vue3中<script setup>和setup函数的区别是什么
是在单文件组件 (SFC) 中使用组合式 API 的编译时语法糖。当同时使用 SFC 与组合式 API 时该语法是默认推荐。相比于普通的 语法,它具有更多优势:
更少的样板内容,更简洁的代码。
能够使用纯 TypeScript 声明 props 和自定义事件。
更好的运行时性能 (其模板会被编译成同一作用域内的渲染函数,避免了渲染上下文代理对象)。
更好的 IDE 类型推导性能 (减少了语言服务器从代码中抽取类型的工作)。
以上是vue3官网对
setup函数的写法中定义的变量和函数都需要return出来,不然无法正常使用。
在<script setup>语法糖的写法
在<script setup>语法糖中的定义的变量和函数无需return。里面的代码会被编译成组件 setup() 函数的内容。这意味着与普通的 只在组件被首次引入的时候执行一次不同, 中的代码会在每次组件实例被创建的时候执行。
二、使用外部文件区别
setup函数
{{test(name)}}
setup函数使用外部文件时需要在setup函数中定义成一个方法才能正常使用。
<script setup>语法糖
{{ test(name) }}
在<script setup>语法糖中无需再定义成一个方法,可以直接使用 。
三、注册组件
setup函数
<script setup>语法糖
不需要在component 中注册了,可以直接使用。
四、使用自定义指令
setup函数
使用了setup函数
<script setup>语法糖
使用了script setup
全局注册的自定义指令将正常工作。本地的自定义指令在 中不需要显式注册,但他们必须遵循 vNameOfDirective 这样的命名规范
五、父传子数据通信
setup函数
<script setup>语法糖
六、子传父数据通信
setup函数
<script setup>语法糖
defineProps 和 defineEmits 都是只能在

不使用defineExpose

八、与普通的
九、顶层的 await
中可以使用顶层 await。结果代码会被编译成 async setup()
另外,await 的表达式会自动编译成在 await 之后保留当前组件实例上下文的格式。
