前言

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. C语言:获取汉字的编码

    #include <stdio.h> #include <locale.h> #include <wchar.h> int main() { setlocale(L ...

  2. C语言:const详解

    希望定义这样一种变量,它的值不能被改变,在整个作用域中都保持固定.例如,用一个变量来表示班级的最大人数,或者表示缓冲区的大小.为了满足这一要求,可以使用const关键字对变量加以限定:const in ...

  3. LeetCode解题记录(双指针专题)

    1. 算法解释 双指针主要用于遍历数组,两个指针指向不同的元素,从而协同完成任务.也可以延伸到多个数组的多个指针. 若两个指针指向同一数组,遍历方向相同且不会相交,则也称为滑动窗口(两个指针包围的区域 ...

  4. 【LeetCode】283.移动零

    283.移动零 知识点:数组:双指针: 题目描述 给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序. 示例 输入: [0,1,0,3,12] 输出: [1, ...

  5. 40.qt quick- 高仿微信实现局域网聊天V4版本(支持gif动图表情包、消息聊天、拖动缩放窗口)

    在上章37.qt quick- 高仿微信实现局域网聊天V3版本(添加登录界面.UDP校验登录.皮肤更换.3D旋转),我们已经实现了: 添加登录界面. UDP校验登录. 皮肤更换. 3D旋转(主界面和登 ...

  6. Centos 7 配置阿里云 yum 源

    Centos 7 配置阿里云 yum 源 一. 禁用 yum 插件 fastestmirror 修改插件的配置文件 cp /etc/yum/pluginconf.d/fastestmirror.con ...

  7. spring boot(二)整合mybatis plus+ 分页插件 + 代码生成

    先创建spring boot项目,不知道怎么创建项目的 可以看我上一篇文章 用到的环境 JDK8 .maven.lombok.mysql 5.7 swagger 是为了方便接口测试 一.Spring ...

  8. Redis主从复制那点事

    ​     我们在 Redis持久化机制你学会了吗?学习了AOF和RDB,如果Redis宕机,他们分别通过回放日志和重新读入RDB文件的方式恢复数据,从而提高可靠性.我们今天来想这么一个问题,假如我们 ...

  9. vulnhub-DC:3靶机渗透记录

    准备工作 在vulnhub官网下载DC:1靶机www.vulnhub.com/entry/dc-3,312/ 导入到vmware 导入的时候遇到一个问题 解决方法: 点 "虚拟机" ...

  10. odoo14学习----x2many操作与图片设置继承image.mixin

    三种方式实现数据更新 一,如上所述 二,通过对数据集调用update({'key':value,'key1':value1..})更新数据集 三,调用write函数,与update类似,传递字典.   ...