Vue3 Composition API写烦了,试试新语法糖吧—setup script
前言
Vue3发布近一年了,相信大家对Vue3的新特性,新语法都很熟悉了。那么在使用Composition API的过程中,有没有觉得整个过程比较繁琐。比如你的模板里用到了大量的state和方法的时候,都需要在setUp()函数里一一return出去。这个过程就比较难受了。
setup script 语法糖
setup script 是vue3的一个新的语法糖,用起来特别简单。只需要在script标签中加上setup 关键字。
<script setup>
export default {
...
}
</script>
setup script 的作用
1. 子组件无需手动注册
setup script语法自动注册子组件,很容易理解。我们来对比一下Composition API和setup script 的写法,一看便知。
Composition API语法:
<template>
<Child >我是子组件</Child>
</template>
<script>
import Child from '@/components/child.vue'
export default {
components:{
Child
},
setup(){
return {
}
}
}
</script>
setup script 语法:
<template>
<Child >我是子组件</Child>
</template>
<script setup>
// 组件只需要引入,不需要手动注册
import Child from '@/components/child.vue'
</script>
看到这里,相信聪明的大家都已经了解了setup script 的第一个作用了。
2. 不需要返回方法和属性
写一个简单的点击按钮,数字加1的demo,来对比一下两种写法的不同。
Composition API提供的setup()生命周期,我们经常这样来使用它:
<template>
<div>{{state.count}}</div>
<button @click="handleClick">点我+1</button>
</template>
<script>
export default {
import { reactive,ref,watch } from 'vue';
setup(){
const state = reactive({
count:0;
})
const handleClick = () => {
state.count++
}
return {
state,
handleClick
}
}
}
</script>
setup script 语法:
<template>
<div>{{state.count}}</div>
<button @click="handleClick">点我+1</button>
</template>
<script setup>
import { reactive,ref,watch } from 'vue';
const state = reactive({
count:0;
})
const handleClick = () => {
state.count++;
}
</script>
setup script 语法更加简洁,属性和方法不需要返回暴露出去,template模板中就可以直接使用。上面的demo代码量比较少,setup script 的作用直观上并不凸出。等到业务比较复杂,申明的属性和方法比较多的时候,setup script语法糖用起来就爽很多了。
3. 支持props、context API
使用Composition API的朋友都知道,setup()钩子暴露了两个属性props,context。
那么,肯定有人疑惑,如果不使用setup()钩子了,我们怎么获取props和context?
我们先来看看props,context中是什么?
props:

context:

其实,vue3已经给我们提供了这方面的API:useAttrs,useSlots, defineProps, defineEmits ,让我们一起来看看它们的用法:
获取context中的attrs, emit, expose, slots:
<script setup>
import { useAttrs,useSlots, defineExpose, defineEmits } from 'vue'
export default {
// 获取attrs
const attrs = useAttrs()
console.log(attrs)
// 获取 emit
const emit = defineEmits(['change', 'close'])
emit('change', 'change事件的payload')
emit('close', 'close事件的payload')
// 获取expose
const a = 1
const b = 2
defineExpose({
a,
b
})
// 获取slots
const slots = useSlots()
console.log(slots)
}
</script>
获取props:
<script setup>
// 接受父组件传递的props
const props = defineProps({
msg: String,
name: String
age: Number
})
</script>
总结
以上就是vue3新出的语法糖setup script的基本使用方法了,是不是很香呢?这个语法糖在2021年6月29日正式定稿了,有兴趣的同学快去试试吧。
参考文章:
https://github.com/vuejs/rfcs/pull/227#issuecomment-870105222
福小斌
Vue3 Composition API写烦了,试试新语法糖吧—setup script的更多相关文章
- 关于C#7 新语法糖
C#7新语法糖 1.Switch 使用 goto 使用 ; switch (kk) { : Console.WriteLine(); ; : Console.WriteLine(); ; : Con ...
- C++11新语法糖之尾置返回类型
C++11的尾置返回类型初衷是为了方便复杂函数的声明和定义,但是当复杂度稍微提升一些的时候很明显能注意到这种设计的作用微乎其微. 首先考虑如下代码: C++ //返回指向数组的指针 auto func ...
- 各个JDK版本新语法糖
java5语法扩充 自动装箱.泛型.动态注解.枚举.可变长参数.循环遍历等语法 JDK7 fork/join jdk8 二进制数的原生支持.switch语句中支持string <>操作符 ...
- Vue 3.0 Composition API - 中文翻译
Composition API 发布转载请附原文链接 https://www.cnblogs.com/zgh-blog/articles/composition_api.html 这两天初步了解了下 ...
- vue3 学习笔记(九)——script setup 语法糖用了才知道有多爽
刚开始使用 script setup 语法糖的时候,编辑器会提示这是一个实验属性,要使用的话,需要固定 vue 版本. 在 6 月底,该提案被正式定稿,在 v3.1.3 的版本上,继续使用但仍会有实验 ...
- vue3.0 的 Composition API 的一种使用方法
网上讨论的文章已经很多了,这里举一个简单的例子来讨论一下 Composition API 的用法,具体问题才好具体讨论嘛. 假如我们要做一个论坛的讨论列表和分页,以前是把需要的数据都放在data里面, ...
- Vue3全家桶升级指南一composition API
1.setup() vue3中的composition API中最重要的就是setup方法了,相当于组件的入口,所有的composition API都必须放到setup()中的使用. setup是在组 ...
- 好久没发文了,一篇Vue3的Composition API使用奉上
Composition API Composition API是Vue3中推荐的组件代码书写方式,相较于传统的Options API来说,它能让业务逻辑处理和后期代码维护变的更加简单. 首先我们来看O ...
- Vue3实战系列:结合 Ant-Design-of-Vue 实践 Composition API
Vue 3 出来之后,很多人有如下想法,"又要学新东西啦"."我学不动了"等等. 但是事物总有它的两面性,前端知识更新的很快,利好勤奋好学的同学.计算机行业的迭 ...
随机推荐
- Archive for required library:’ WebRoot/WEB-INF/Mytag.tld’in project ‘TagTest’ cannot be read or is not a valid ZIP file
Description::部署tld文件时报错 我的解决方法: 右击(当前项目)->Build Path->Java Build Path ( Configure Build Path.. ...
- ARTS第四周
补第四周 1.Algorithm:每周至少做一个 leetcode 的算法题2.Review:阅读并点评至少一篇英文技术文章3.Tip:学习至少一个技术技巧4.Share:分享一篇有观点和思考的技术文 ...
- CentOS 8 已经不再支持,Rocky Linux 才是未来
2020年12月8日,红帽公司宣布,他们将停止开发CentOS,而在此之前CentOS一直作为红帽企业Linux的生产型分支及下游版本,此后他们将转而开发该操作系统的一个更新的上游开发变种,即 &qu ...
- 关闭火狐浏览器中的Pocket功能
在火狐(Firefox)浏览器中,默认右键菜单和菜单栏都会有 Pocket按钮 .但是大部分国内用户都不会使用Pocket服务,看着还十分碍眼. 在工具栏的图标还可以通过定制工具栏修改,但是右键菜单中 ...
- IP数据包格式与ARP转发原理
一.网络层简介1.网络层功能2.网络层协议字段二.ICMP与封装三.ARP协议与ARP欺骗1.ARP协议2.ARP欺骗 1.网络层功能 1. 定义了基于IP地址的逻辑地址2. 连接不同的媒介3. 选择 ...
- HDFS学习总结之API交互
第一种.shell交互 官方文档:http://archive.cloudera.com/cdh5/cdh/5/hadoop-2.6.0-cdh5.7.0/hadoop-project-dist/ha ...
- 使用jquery的on方法注册事件遇到的坑
1,使用on注册事件 $(selector).on(event,childSelector,data,function) 2,$(selector)中的selector可以是document,那么意味 ...
- 祝贺|合肥.NET俱乐部第二期技术沙龙活动圆满成功
热烈祝贺合肥.NET俱乐部第二期技术沙龙圆满成功,感恩参与活动的每一位小伙伴!正是因为有你们才促成了这次聚会的成功.现对此次活动进行简单回顾并附上精彩的活动图片,每一位参与活动者名单,以及此次活动讲师 ...
- Dubbo的优雅下线原理分析
文/朱季谦 Dubbo如何实现优雅下线? 这个问题困扰了我一阵,既然有优雅下线这种说法,那么,是否有非优雅下线的说法呢? 这,还真有. 可以从linux进程关闭说起,其实,我们经常使用到杀进程的指令背 ...
- 开发工具IDE从入门到爱不释手(四)高级进阶
代码生成Alt+Insert set/get生成 构造方法生成 toString生成 hashCode,equals 代码重构Refactor 不改变原有逻辑,让IDE帮助代码美观 重命名 Shift ...