1.前言
刚开始的script setup只是一个实验性提案
如今该组合式 API 的编译时语法糖已被正式定稿,我如今在正式项目使用就一个字:真爽(手动狗头)
相比于普通的
<script>
语法,它具有更多优势:
- 更少的样板内容,更简洁的代码
- 能够使用纯 Typescript 声明 props 和抛出事件
- 更好的运行时性能 (其模板会被编译成与其同一作用域的渲染函数,没有任何的中间代理)
- 更好的 IDE 类型推断性能 (减少语言服务器从代码中抽离类型的工作)
注意此文后面使用Vetur,但是由于Vue3支持有限,会出现模板使用但是本身还是灰色未引用的情况
推荐一个支持较好的插件:
2.核心使用
顶层的绑定的变量、函数、导入组件等直接暴露模板使用
父子通信
父组件:
子组件:
v-model
父组件:
子组件:
ref和组件的defineExpose
script setup
定义的变量默认不会暴露出去,这时我们可以使用definExpose({ })
来暴露组件内部属性给父组件使用
父组件:
子组件:
非Props属性(useAttrs)
插槽slot(useSlots)
父组件:
子组件:
路由和store钩子
原型绑定与组件内使用
对 await 的支持
不必再配合 async 就可以直接使用 await 了,这种情况下,组件的 setup 会自动变成 async setup
与普通的 <script>
一起使用
<script setup>
可以和 普通的<script>
混用,一般用来声明一些<script setup>
无法声明的选项