22张图领略 Vue3.2 script setup 真香语法糖(二十一)

895 阅读1分钟

1.前言

刚开始的script setup只是一个实验性提案

如今该组合式 API 的编译时语法糖已被正式定稿,我如今在正式项目使用就一个字:真爽(手动狗头)

相比于普通的 <script> 语法,它具有更多优势:

  • 更少的样板内容,更简洁的代码
  • 能够使用纯 Typescript 声明 props 和抛出事件
  • 更好的运行时性能 (其模板会被编译成与其同一作用域的渲染函数,没有任何的中间代理)
  • 更好的 IDE 类型推断性能 (减少语言服务器从代码中抽离类型的工作)

注意此文后面使用Vetur,但是由于Vue3支持有限,会出现模板使用但是本身还是灰色未引用的情况

推荐一个支持较好的插件:

image-20220223005808359

2.核心使用

顶层的绑定的变量、函数、导入组件等直接暴露模板使用

image-20220223005525101 image-20220223005342938

image-20220222144622189

image-20220223005614635

父子通信

父组件:

image-20220222145754873

子组件:

image-20220222145840325

image-20220222145901246

v-model

父组件:

image-20220222150315016

子组件:

image-20220222150704482 image-20220222150726132

ref和组件的defineExpose

script setup定义的变量默认不会暴露出去,这时我们可以使用definExpose({ })来暴露组件内部属性给父组件使用

父组件:

image-20220222180132827

子组件:

image-20220222170000206

image-20220222170014441

非Props属性(useAttrs)

image-20220222171441847

插槽slot(useSlots)

父组件:

image-20220222171011179

子组件:

image-20220222171049389 image-20220222171115013

路由和store钩子

image-20220222172024050

原型绑定与组件内使用

image-20220222172442691

对 await 的支持

不必再配合 async 就可以直接使用 await 了,这种情况下,组件的 setup 会自动变成 async setup

image-20220222174008605

与普通的 <script> 一起使用

<script setup> 可以和 普通的 <script> 混用,一般用来声明一些 <script setup> 无法声明的选项

image-20220222174428990