前言

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的更多相关文章

  1. 关于C#7 新语法糖

    C#7新语法糖 1.Switch 使用  goto 使用 ; switch (kk) { : Console.WriteLine(); ; : Console.WriteLine(); ; : Con ...

  2. C++11新语法糖之尾置返回类型

    C++11的尾置返回类型初衷是为了方便复杂函数的声明和定义,但是当复杂度稍微提升一些的时候很明显能注意到这种设计的作用微乎其微. 首先考虑如下代码: C++ //返回指向数组的指针 auto func ...

  3. 各个JDK版本新语法糖

    java5语法扩充 自动装箱.泛型.动态注解.枚举.可变长参数.循环遍历等语法 JDK7 fork/join jdk8  二进制数的原生支持.switch语句中支持string <>操作符 ...

  4. Vue 3.0 Composition API - 中文翻译

    Composition API 发布转载请附原文链接 https://www.cnblogs.com/zgh-blog/articles/composition_api.html 这两天初步了解了下 ...

  5. vue3 学习笔记(九)——script setup 语法糖用了才知道有多爽

    刚开始使用 script setup 语法糖的时候,编辑器会提示这是一个实验属性,要使用的话,需要固定 vue 版本. 在 6 月底,该提案被正式定稿,在 v3.1.3 的版本上,继续使用但仍会有实验 ...

  6. vue3.0 的 Composition API 的一种使用方法

    网上讨论的文章已经很多了,这里举一个简单的例子来讨论一下 Composition API 的用法,具体问题才好具体讨论嘛. 假如我们要做一个论坛的讨论列表和分页,以前是把需要的数据都放在data里面, ...

  7. Vue3全家桶升级指南一composition API

    1.setup() vue3中的composition API中最重要的就是setup方法了,相当于组件的入口,所有的composition API都必须放到setup()中的使用. setup是在组 ...

  8. 好久没发文了,一篇Vue3的Composition API使用奉上

    Composition API Composition API是Vue3中推荐的组件代码书写方式,相较于传统的Options API来说,它能让业务逻辑处理和后期代码维护变的更加简单. 首先我们来看O ...

  9. Vue3实战系列:结合 Ant-Design-of-Vue 实践 Composition API

    Vue 3 出来之后,很多人有如下想法,"又要学新东西啦"."我学不动了"等等. 但是事物总有它的两面性,前端知识更新的很快,利好勤奋好学的同学.计算机行业的迭 ...

随机推荐

  1. 因为它,我差点删库跑路:js防抖与节流

    前言 前端踩雷:短时间内重复提交导致数据重复. 对于前端大佬来说,防抖和节流的技术应用都是基本操作.对于"兼职"前端开发的来说,这些都是需要躺平的坑. 我们今天就来盘一盘js防抖与 ...

  2. c语言的自动类型转换(转)

    一.自动转换遵循以下规则: 若参与运算量的类型不同,则先转换成同一类型,然后进行运算. 转换按数据长度增加的方向进行,以保证精度不降低.如int型和long型运算时,先把int量转成long型后再进行 ...

  3. 去抖动 debounce

    最近才发现 debounce 在 减少DOM操作及资源加载方面得重要性,遂写个博客记录一下 /** * @param {Function} func 要执行的函数 * @param {number} ...

  4. WIN7 WIN10修改path不用重启即可生效

    近来安装python scrapy经常忘了添加到path,需要时增加了但需要重启才能起作用,用下面的方法马上能生效: 1修改path:右击"计算机"--高级--环境变量--path ...

  5. File类与常用IO流第十章——序列化流

    第十章.序列化流 序列化流和反序列化流概述 序列化:用一个字节序列表示一个对象,该字节序列包含该对象的数据.对象的类型和对象中存储的属性等等信息.字节序列写出到文件后,相当于文件中持久保存了一个对象的 ...

  6. CF896D Nephren Runs a Cinema

    CF896D Nephren Runs a Cinema 题意 售票员最开始没有纸币,每次来一个顾客可以给她一张.拿走她一张或不操作.求出不出现中途没钱给的情况 \(n\) 名顾客后剩余钱数在 \(l ...

  7. java String转List<Device>集合

    // 从Redis中获得正常设备的数量 String success = redisService.get(RedisKey.CULTIVATION_RECORD_SUCCESS); //建立一个li ...

  8. Maven国内仓库

    由于国外的官方Maven仓库比较慢,所以寻找国内的代理仓库. 网上找了一些博客,内容都是一模一样,并且不贴代理官方的说明. 我在阿里云的Maven仓库找到了官方说明. 下面直接贴配置指南: 配置指南 ...

  9. vue传值 ---- >> 子传父,$emit()

    划重点: $emit 绑定一个自定义事件event,当这个这个语句被执行到的时候,就会将参数arg传递给父组件,父组件通过@event监听并接收参数.   子组件:   1 <template& ...

  10. RHCAS_DAY06

    vi/vim文本编辑器 Vim是从 vi 发展出来的一个文本编辑器,vim 具有程序编辑的能力,可以主动的以字体颜色辨别语法的正确性 vi/vim 共分为三种模式:命令模式.输入模式.底线命令模式(末 ...