学习script setup 语法糖
创始人
2024-06-03 16:19:08
0

首先讲解组合式API:setup()

setup 函数是一个组件选项,在创建组件之前执行,一旦 props 被解析,并作组合式 API 的入口。

BEFORE

setup 选项是一个接收 propscontext 的函数。此外,我们将 setup 返回的所有内容都暴露给组件的其余部分 (计算属性、方法、生命周期钩子等等) 以及组件的模板。

NOW 

新的 setup 选项是在组件创建之前, props 被解析之后执行,是组合式 API 的入口。

在添加了setup的script标签中,组件只需引入不用注册,属性和方法也不用返回,也不用写setup函数,也不用写export default,甚至是自定义指令也可以在我们的template中自动获得。

tip:在 setup 中应该避免使用 this,因为它不会找到组件实例。

要注意的是 "暴露给模板" 不同于 "暴露给外部

TIP:在使用 Vue 3 生命周期的情况下,整个组件相关的业务代码,都可以放在 setup 里执行。

因为在 setup 之后,其他的生命周期才会被启用.

对比Vue2、Vue3生命周期变化

组件生命周期

Vue 2 生命周期Vue 3 生命周期执行时间说明
beforeCreatesetup组件创建前执行
createdsetup组件创建后执行
beforeMountonBeforeMount组件挂载到节点上之前执行
mountedonMounted组件挂载完成后执行
beforeUpdateonBeforeUpdate组件更新之前执行
updatedonUpdated组件更新完成之后执行
beforeDestroyonBeforeUnmount组件卸载之前执行
destroyedonUnmounted组件卸载完成后执行
errorCapturedonErrorCaptured当捕获一个来自子孙组件的异常时激活钩子函数

可以看到 Vue 2 生命周期里的 beforeCreatecreated ,在 Vue 3 里已被 setup 替代。


script setup 语法糖

它是 Vue3 的一个新语法糖,在 setup 函数中,所有 ES 模块导出都被认为是暴露给上下文的值,并包含在 setup() 返回对象中。相对之前的写法,语法更简单。

一、自动注册属性和方法无需返回,直接使用

1.

 

二.组件自动注册

在 script setup 中,引入的组件可以直接使用,无需再通过components进行注册,并且无法指定当前组件的名字,它会自动以文件名为主,也就是不用再写name属性了。

示例

// 组件命名采用的是大驼峰,引入后不需要在注册
// 在使用的使用直接是小写和横杠的方式连接 test-com
import TestCom from "../components/TestCom.vue"

 

三.defineProps 和 defineEmits

不需要使用setup函数,那么子组件怎么接受父组件传递过来的值呢?props,emit怎么获取呢?

当当当当!defineProps

1.defineProps

defineProps ----> [用来接收父组件传来的 props]

通过defineProps指定当前 props 类型,获得上下文的props对象。

示例:

父组件传递参数:


import TestCom from "../components/TestCom.vue"
let msg='今天是2023年3月14日'

子组件接受参数:

import {defineProps} from 'vue'defineProps({info:{type:String,default:'----'},time:{type:String,default:'0分钟'},
})

解决了父组件向子组件传值,那么子组件怎么向父组件抛出事件?

2.defineEmits

定义 emit

defineEmit ----> [子组件向父组件事件传递]

使用defineEmit定义当前组件含有的事件,并通过返回的上下文去执行 emit。

代码示列

父子组件通信

defineProps 用来接收父组件传来的 props ; defineEmits 用来声明触发的事件。

父组件

//父组件

 子组件

//子组件
  • 子组件通过 defineProps 接收父组件传过来的数据
  • 子组件通过 defineEmits 定义事件发送信息给父组件

四.useSlots()useAttrs()

获取 slots 和 attrs

  1. useAttrs:这是用来获取 attrs 数据,但是这和 vue2 不同,里面包含了 class属性方法

const attrs = useAttrs();
// 新

五.defineExpose API

defineExpose ----> [组件暴露出自己的属性]

传统的写法,我们可以在父组件中,通过 ref 实例的方式去访问子组件的内容,但在 script setup 中,该方法就不能用了,setup 相当于是一个闭包,除了内部的 template模板,谁都不能访问内部的数据和方法。

父组件

//父组件

六.新增指令 v-memo

v-memod会记住一个模板的子树,元素和组件上都可以使用。

该指令接收一个固定长度的数组作为依赖值进行“记忆比对”。如果数组中的每个值都和上次渲染的时候相同,则整个子树的更新会被跳过。

即使是虚拟 DOM 的 VNode 创建也将被跳过,因为子树的记忆副本可以被重用。

因此渲染的速度会非常的快。

tip:正确地声明记忆数组是很重要。

开发者有责任指定正确的依赖数组,以避免必要的更新被跳过。

{{ item.name   }}

v-memod的指令使用较少,它的作用是:缓存模板中的一部分数据。

只创建一次,以后就不会再更新了。也就是说用内存换取时间。


七.style v-bind 

例:style v-bindspan变成红色

import { reactive } from 'vue'const state = reactive({color: 'red'})

span {/* 使用v-bind绑定state中的变量 */color: v-bind('state.color');}  

八.定义组件其他配置

配置项的缺失,有时候我们需要更改组件选项,在setup中我们目前是无法做到的。我们需要在上方再引入一个 script,在上方写入对应的 export即可,需要单开一个 script。

注意:Vue 3 SFC 一般会自动从组件的文件名推断出组件的 name。在大多数情况下,不需要明确的 name 声明。唯一需要的情况是当你需要 包含或排除或直接检查组件的选项时,你需要这个名字。


 

参考文章:https://juejin.cn/post/7209872710155206717 

Vue3 script setup 语法糖-阿里云开发者社区 (aliyun.com)

相关内容

热门资讯

贵州茅台年度股东大会5月19日... 人民财讯5月18日电,5月19日,贵州茅台(600519)将召开2024年度股东大会,大会开幕前夕(...
北京:当运动会“撞上”民族风,... 中国青年报客户端讯(实习生 杨丽 中青报·中青网记者 张敏)“有一种重返校园的青春感,希望能常有这样...
宠物友好出行如何可持续发展?网... 中国青年报客户端讯(中青报·中青网见习记者 刘佳佳 记者 宁迪)随着养宠群体的增加,携宠出行的需求不...
“银发列车”有啥服务?能去哪儿... 转自:中国妇女网2025年春季以来,中国多地铁路部门都纷纷推出了银发旅游专列,不仅改善了老年群体的出...
山西发布高温橙色预警:“热浪”... 中新网太原5月18日电 (刘小红)18日,山西省气象台发布高温橙色预警和大风蓝色预警,该省多地即将进...
武契奇:我已经“受够了”! 据法新社5月17日报道,塞尔维亚总统武契奇在17日的一次集会上对支持者们说,他已经“受够了”要求提前...
“全要素”服务 “创业青年”的... 转自:天津广播电视台天津北方网讯:让更多科研成果从“实验室”走向“生产线”,天开园围绕概念验证、金融...
辉煌70年 奋进新征程丨智慧农... 转自:千龙网4月27日,新疆宏基智能农机装备制造有限公司生产车间内,10名工人正忙着改装4台采棉机。...
银企对接会服务企业“出海” 转自:天津广播电视台天津北方网讯:助力企业“出海”,市委金融办、市商务局联合中国人民银行天津市分行等...
疑似 IOSG 地址提取 94... 吴说获悉,据 Arkham 监测,地址: 0xd4…17e9 于本日 20:25 UTC+8 从 B...
男子懒得下楼从30多楼扔酒瓶被... 转自:荔枝新闻 #男子喝酒怕家人发现多次30楼扔酒瓶#【...
中国旅马大熊猫“福娃”“凤仪”... 中新社吉隆坡5月18日电 (记者 陈悦)中国旅马大熊猫“福娃”(在马名字为“兴兴”)和“凤仪”(在马...
在德清,看见县域经济新势能 竹林如海,溪水潺潺。作为天目山的余脉、“全球最值得一去的45个地方之一”,浙江德清县境内的莫干山不仅...
学习时节|如何加强作风建设,总...   5月16日出版的第10期《求是》杂志发表中共中央总书记、国家主席、中央军委主席习近平的重要文章《...
成都警方披露千万诈骗案细节:平... 【#成都警方披露千万诈骗案细节#:平时营造节俭人设】日前,四川成都公安经侦部门公布了一起系列合同诈骗...
中共中央、国务院:公务用车集中... (转自:观点网)观点网讯:5月18日,中共中央、国务院印发修订后的《党政机关厉行节约反对浪费条例》,...
太美太好买!上千老外组队游上海... 这两天,一个上千人的会奖团队正在上海展开他们的精彩行程,这是今年以来上海单批次接待规模最大的入境会奖...
央视曝光废旧工厂成非法垃圾山!... 来源:@央视财经微博 【#央视曝光废旧工厂成非法垃圾山#...
欧洲央行行长:美国政策反复无常... 转自:千龙网新华社法兰克福5月18日电(记者单玮怡)欧洲央行行长拉加德日前接受法国《星期日论坛报》采...
泸州老窖在葡萄牙举办推介活动 转自:千龙网新华网里斯本5月18日电(记者荀伟)中国知名白酒品牌泸州老窖16日在里斯本举办“浓香无界...