vue3.2 —— setup script
Script setup 语法糖下 组件 的使用
-
自动的组件名推断
Vue 默认把 文件名 直接当成组件名,无需显式声明组件名。 -
普通组件的使用
组件不需要注册,引入直接使用。
原理:setup script 在编译的时候把 template 的内容变成 vNode 后继而由 setup 函数中返回。
-
动态组件
同 Vue2
-
递归组件
名为Foo.vue
的组件可以在其模板中用<Foo/>
引用它自己 -
命名空间组件
Components/index.ts
用于导出组件
index.vue
基于命名组件使用组件
1 | <script setup lang='ts'> |
Script setup 语法糖下 props 的使用
- props 的使用 ———— defineProps
-
运行时声明和类型声明
运行时声明会在运行后给出提示,是 Vue 提供给我们的。
缺点:无法对数组中的对象进行校验。1
2
3
4defineProps:{
height:Number,
title:String,
}类型声明基于 ts 类型检查,可在编译时类型检查
1
2
3
4
5defineProps<{
height:number
title?:string
list:{id:number,content:string}[]
}>()
-
Compiler Macros(编译时宏命令)
<setup script>
在运行前会经过一个编译的过程,这个语法糖提供了一系列宏命令供开发者使用,在编译阶段会进行替换。 -
props 的默认值 ———— withDefaults
类型声明可以用 ? 来确定 props 是否 require,但是没有决定默认值的语法。
- 基本用法
1
2
3
4
5
6const props = withDefaults(definedProps<{
title?:string,
list:{id:number,content:string}
}>(),{
title:'类型声明的默认值'
})
Script setup 语法糖下 emit 的使用
-
自定义事件的使用 defineEmits
普通写法和类型声明式
普通写法对传参没有类型提示1
const emits = defineEmits(['parentClick','parentChange'])
类型声明基于 ts 类型检查,可在编译时类型检查
1
2
3
4const emits = defineEmits<{
(e:'parentClick',data:number)=>void,
(e:'parentChange')=>void
}>() -
显示暴露 ———— defineExpose
在 setup script 中,默认情况下无法通过 ref 来获取子组件的属性和方法,需要通过 defineExpose 宏命令显式暴露出子组件的属性和方法。
单独暴露1
2
3
4defineExpose({
count,
handle
})全部暴露(普通
<script>
下书写)1
2
3export default {
}
Script setup 和 普通 script 一起使用
1 | <script> |