Vue3之script-setup全面解析

可能很多同学(包括我)刚上手 Vue 3.0 之后,都会觉得开发过程似乎变得更繁琐了,Vue 官方团队当然不会无视群众的呼声,如果你基于脚手架和 .vue 文件开发,那么可以享受到更高效率的开发体验。

在阅读这篇文章之前,需要对 Vue 3.0 的单组件有一定的了解,如果还处于完全没有接触过的阶段,请先抽点时间阅读 单组件的编写 一章。

WARNING
本章节的部分方案属于实验性方案,或者是刚进入定稿阶段,所以在官网文档上还暂时看不到使用说明,期间可能还会有一些功能调整和 BUG 修复,请留意版本号说明。

所以要体验以下新特性,请确保项目下 package.json 里的 vue (opens new window)和 @vue/compiler-sfc (opens new window)都在 v3.1.4 版本以上,最好同步 NPM 上当前最新的 @next 版本,否则在编译过程中可能出现一些奇怪的问题(这两个依赖必须保持同样的版本号)。

#script-setup

这是一个比较有争议的新特性,作为 setup 函数的语法糖,褒贬不一,不过经历了几次迭代之后,目前在体验上来说,感受还是非常棒的。

TIP
截止至 2021-07-16 ,

关于标准 setup 和 defineComponent 的说明和用法,可以查阅 全新的 setup 函数 一节。

script-setup 的推出是为了让熟悉 3.0 的用户可以更高效率的开发组件,减少一些心智负担,只需要给 script 标签添加一个 setup 属性,那么整个 script 就直接会变成 setup 函数,所有顶级变量、函数,均会自动暴露给模板使用(无需再一个个 return 了)。

Vue 会通过单组件编译器,在编译的时候将其处理回标准组件,所以目前这个方案只适合用 .vue 文件写的工程化项目。



对,就是这样,代码量瞬间大幅度减少……

TIP
因为 script-setup 的大部分功能在书写上和标准版是一致的,这里只提及一些差异化的表现。

#全局编译器宏

在 script-setup 模式下,新增了 4 个全局编译器宏,他们无需 import 就可以直接使用。

但是默认的情况下直接使用,项目的 eslint 会提示你没有导入,但你导入后,控制台的 Vue 编译助手又会提示你不需要导入,就很尴尬…

哈哈哈哈不过不用着急,可以配置一下 lint ,把这几个编译助手写进全局规则里,就可以了,不需要导入也不会报错了。

// 项目根目录下的 .eslintrc.js
module.exports = {
  // 原来的lint规则,补充下面的globals...
  globals: {
    defineProps: 'readonly',
    defineEmits: 'readonly',
    defineExpose: 'readonly',
    withDefaults: 'readonly',
  },
}

关于几个宏的说明都在下面的文档部分有说明,你也可以从这里导航过去直接查看。

说明
defineProps 点击查看
defineEmits 点击查看
defineExpose 点击查看
withDefaults 点击查看

下面我们继续了解 script-setup 的变化。

#template 操作简化

如果使用 JSX / TSX 写法,这一点没有太大影响,但对于习惯使用