Vue--》Vue3的setup语法糖到底香不香?你来看看就知道了

news2024/11/23 4:39:08

目录

setup语法糖

创建Vue3项目

setup语法糖的使用

快速生成setup语法糖模板

setup语法糖新增的API

useSlots()和useAttrs()

顶层await


setup语法糖

相信在了解过这篇文章的 setup函数讲解 人会觉得Vue3处理数据变得繁琐了,所有的变量都必须return出来才能使用,为了简化这种书写方式,Vue方法提供了setup语法糖,使用语法糖之后,只需要在 script 标签上加上 setup 属性,无需 return , template 便可直接使用,引入的组件也无需在注册,大大提高了程序员的编程效率。

相比于普通的<script>语法,它具有更多优势

1)更少的样板内容,更简洁的代码。

2)能够使用纯 TypeScript 声明 props 和自定义事件。

3)更好的运行时性能 (其模板会被编译成同一作用域内的渲染函数,避免了渲染上下文代理对象)。

4)更好的 IDE 类型推导性能 (减少了语言服务器从代码中抽取类型的工作)。

因为Vue3.2版本才开始能使用语法糖,所以我们就需要创建最新版本的Vue框架,这里我就借助轻量级的Vite进行讲解吧。

创建Vue3项目

在文件下新建cmd,输入以下命令,来创建 Vue3中最新版本的Vue:

npm init vite@latest

选择要创建的框架,我这里选择Vue

选择开发语言,我这里就选择JS了,Vue3创建TS项目,后期再讲解吧。

选择完成后下载依赖包即可,下载完成用编译器打开文件就可以进行开始编程了。

setup语法糖的使用

要启用该语法,需要在 <script> 代码块上添加 setup,里面的代码会被编译成组件 setup() 函数的内容。这意味着与普通的 <script> 只在组件被首次引入的时候执行一次不同,<script setup> 中的代码会在每次组件实例被创建的时候执行。setup语法糖和setup()函数之间的区别在于以下几点:

setup语法糖不需要将对象return出去就可以使用:

当使用 <script setup> 的时候,任何在 <script setup> 声明的顶层的绑定 (包括变量,函数声明,以及 import 导入的内容) 都能在模板中直接使用

<template>
  <div>
    <h2>num的值是:{{num}}</h2>
    <button @click="add">+1</button>
    <br>
    <h2>个人信息:姓名{{person.name}},年龄{{person.age}}</h2>
    <button @click="change">修改个人信息</button>
  </div>
</template>

<script setup>
import { ref, reactive } from 'vue'
const num = ref(0)
const person = reactive({
  name:'张三',
  age:18,
})
// 修改数值
function add(){
  num.value++
}
// 修改个人信息
function change(){
  person.name = '李四',
  person.age = 20
}
</script>

import 导入的内容也会以同样的方式暴露。这意味着我们可以在模板表达式中直接使用导入的 add 函数,而不需要通过 methods 选项来暴露它

<template>
  <div>{{ add(2) }}</div>
</template>

<script setup>
import { add } from './index.js'
</script>

引入组件无需注册即可使用:

组件的引用应当被理解为像是在引用一个变量,由于组件是通过变量引用而不是基于字符串组件名注册的,在 <script setup> 中要使用动态组件的时候,应该使用动态的 :is 来绑定:

<template>
  <div>
    <component :is="istrue == true ? Count : Person"></component>
    <br>
    <button @click="changeIstrue">切换组件的显示</button>
  </div>
</template>

<script setup>
import { ref, reactive } from 'vue'
// 引入组件
import Count from './components/Count.vue'
import Person from './components/Person.vue'
const istrue = ref(true)
function changeIstrue(){
  istrue.value = !istrue.value
}
</script>

快速生成setup语法糖模板

为了能够快速使用setup语法糖这里提一下配置语法糖的模板,点击设置,找到配置用户代码片段

点击现有片段,如果之前没有配置过代码片段的人,点击新代码片段即可。

进入配置文件后,将以下代码粘贴进去即可。

"Vue3.2": {
	"prefix": "v3",
	"body": [
		"<template>",
		"\t<div class=\"\">",
		"\t\t$3",
		"\t</div>",
		"</template>\n",
		"<script setup>",
		"import { ref, reactive } from 'vue'",
		"\t$2",
		"</script>\n",
		"<style lang=\"less\" scoped>",
		"\t$4",
		"</style>"
	],
	"description": "Vue3.2"
}

配置完成后,输入我们设置的快捷键即可快速生成模板,不需要我们再手动去输setup了,是不是很方便!!!

setup语法糖新增的API

Vue3官网给我们提供了3个新增的API,官网地址为:官网地址 。

因为是setup内置的API,所以我们不需要像ref、reactive一样还得导入,直接使用即可。这里我简单的说一下,这几个新增的API的使用

defineProps():子组件接收父组件中传来的props。

可以看到我们在修改父组件的 msg 值时,子组件的值也是跟着发送改变的。

上面的是官方的写法,当然新增的API也可以采用如下写法,我个人也是比较推荐, 简洁明了。

defineEmits():子组件向父组件共享数据方法。

defineExpose():子组件暴露属性,可以在父组件中拿到。

使用 <script setup> 的组件是默认关闭的——即通过模板引用或者 $parent 链获取到的组件的公开实例,不会暴露任何在 <script setup> 中声明的绑定。可以通过 defineExpose 编译器宏来显式指定在 <script setup> 组件中要暴露出去的属性:

useSlots()和useAttrs()

在 <script setup> 使用 slots 和 attrs 的情况应该是相对来说较为罕见的,因为可以在模板中直接通过 $slots 和 $attrs 来访问它们。在你的确需要使用它们的罕见场景中,可以分别用:

useSlots函数:可以获取父组件中插槽传递的虚拟dom对象

useAttrs函数:用来获取父组件中非props的传递到子组件的参数/方法。

我现在将msg设置为props属性,来看看接下来的效果:

顶层await

<script setup> 中可以使用顶层 await。结果代码会被编译成 async setup():async setup() 必须与 Suspense 内置组件组合使用,Suspense 目前还是处于实验阶段的特性,会在将来的版本中稳定。

总结

总体来说,setup语法糖还是提供了比较便捷的书写规范,简省了以前许多比较冗余的代码,还是比较香的哈,而setup语法糖我也是看着官方给出的文档来学习的,也是将自己的一些学习上感悟分享给大家,也是希望大家平时能多多阅读一下官方文档,比较权威嘛!如果大家觉得还是有收获的话,希望给个一键三连吧,您的支持就是博主创作的最大动力!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/158440.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

8步,用python实现进行自动化评论、点赞、关注脚本

嗨害大家好鸭&#xff01; 我是小熊猫~ 分享这个没啥&#xff0c;就是好玩 这里写目录标题嗨害大家好鸭&#xff01; 我是小熊猫~开发环境代码实现点击此处跳转文末名片获取1.请求伪装2.获取关键词3. 获取作品评论ID采集4. 设置评论相应内容5. 设置点赞操作6. 设置关注操作7. 获…

数据结构实验头歌 第1关:求图的最短路径

任务描述 本关任务&#xff1a;编程实现求图的最短路径 相关知识 最短路径的Dijkstra算法&#xff1a; 求最短路径就是求图中的每一个点到图中某一个给定点&#xff08;认为编号为0的点&#xff09;的最短距离。 具体算法就是初始有一个旧图&#xff0c;一个新图。开始时旧图中…

Linux项目自动化构建工具-make/Makefifile

目录 背景 实例代码 依赖关系 依赖方法 原理 项目清理 可重复执行的依据 背景 会不会写makefile&#xff0c;从一个侧面说明了一个人是否具备完成大型工程的能力 一个工程中的源文件不计数&#xff0c;其按类型、功能、模块分别放在若干个目录中&#xff0c;makefile定义了一系…

K8s部署前后端分离项目(一)

K8s部署前后端分离项目 环境准备 K8s环境 主节点master&#xff1a;192.168.3.200 子节点node1&#xff1a;192.168.3.201 子节点node2&#xff1a;192.168.3.202 Harbor远程仓库 已部署在master主节点上&#xff0c;目录为&#xff1a;cd /workspace/harbor/harbor 1、登录地…

java使用XDocReport导出word

使用XDocReport 导出word效果word编辑器案例word模板模板制作解决图片不存在时, "现场照片" 列被隐藏问题依赖返回数据对象 DailyRecordReportOpinionVO 审核记录对象PicVo 图片对象导出接口效果 说明: “现场图片” 为动态图片列表 , “专业负责人审核意见” 和 “项…

freeswitch的多租户模式

概述 freeswitch是一款简单好用的VOIP开源软交换平台。 现在的VOIP服务越来越倾向于云端服务&#xff0c;包括呼叫中心云服务&#xff0c;线路云平台。 而云平台对多个客户的服务就需要做好隔离&#xff0c;包括数据隔离、线路隔离、服务隔离等。 freeswitch内部的多租户模…

如何给视频批量添加背景图的实例操作教程

如何给视频添加上背景图片呢&#xff1f;有需要的宝宝跟着小编一起来看看怎么操作的吧。 先运行【云炫AI智剪】&#xff0c;然后再选择画中画&#xff0c;切换相对应的界面当中。 接下来把底画背景图导入到列表中&#xff0c;可以选中文件直接拖动到软件中&#xff0c;或者…

多次执行相同的push、replace问题(重写push、replace)

1.多次执行相同的push、replace问题编程式导航路由跳转到当前路由(参数不变), 多次执行会抛出NavigationDuplicated的警告错误注意:编程式导航&#xff08;push|replace&#xff09;才会有这种情况的异常&#xff0c;声明式导航是没有这种问题&#xff0c;因为声明式导航内部已…

你是真的“C”——详解C语言函数模块知识(上篇)

详解C语言函数模块知识(上篇&#xff09;&#x1f60e;前言&#x1f64c;1. 函数是什么⁉️2、C语言中函数的分类&#x1f64c;库函数&#xff1a;&#x1f603;自定义函数&#x1f603;**这里通过几个例子来辅助大家更好的理解函数如何用** ⁉️1、实现一个函数来交换两个整数…

C语言实现静态通讯录

专栏&#xff1a;C语言 每日一句&#xff1a;这几年可能会有点累&#xff0c;但要相信你的人生不可能就止于此地了&#xff0c;你要有你的梦想&#xff0c;所以你要努力&#xff0c;只有坚持这阵子&#xff0c;才不会辛苦一辈子&#xff0c;努力会让自己过得很好&#xff0c; 静…

Qt扫盲-QAction理论总结

QAction理论总结一、概述二、使用一、概述 在应用程序中&#xff0c;许多常用命令可以通过 菜单、工具栏按钮 和 键盘快捷键 调用。由于用户希望以相同的方式执行每个命令&#xff0c;而不管使用什么用户界面&#xff0c;因此将每个命令表示为一个Action操作是有效的。可以将A…

23年 车辆检测+车距检测+行人检测+车辆识别+车距预测(附yolo v5最新版源码)

我们先看一下效果2023年最新版 yolo车距行人识别yolov5和v7对比yolo车距其他步骤参考另外一篇文章&#xff1a; yolo 车辆测距车辆识别单目测距&#xff08;双目测距&#xff09;_SYBH.的博客-CSDN博客_yolo测距基于yolo目标检测算法实现的车前道路中的车辆和行人检测&#xf…

opener 值得注意的安全问题

前言 最近在学习浏览器知识的时候&#xff0c;讲到了浏览器之间的渲染进程共用的问题。其中 opener 能被引用到的两个页面&#xff0c;会在同一个渲染进程中。而这两个页面&#xff0c;可以称为&#xff1a;浏览上下文组。但在测试的时候&#xff0c;反倒是发现了一个opener 注…

JavaEE进阶第一课:Spring核心与设计思想

目录1.Spring是什么1.1什么是容器1.2什么是IoC1.3什么是DISpring的核心功能1.Spring是什么 用官方的话来说&#xff1a;Spring是包含众多工具方法的IoC容器 但是仅仅这样一句话&#xff0c;就会让大家有许多不解&#xff1f;什么是IoC&#xff1f;什么是容器&#xff1f;接下来…

python基础篇之字符串类型

大家好&#xff0c;我是csdn的博主&#xff1a;lqj_本人 这是我的个人博客主页&#xff1a;lqj_本人的博客_CSDN博客-微信小程序,前端,vue领域博主lqj_本人擅长微信小程序,前端,vue,等方面的知识https://blog.csdn.net/lbcyllqj?spm1000.2115.3001.5343 哔哩哔哩欢迎关注&…

Java字节流基础详解(InputStream/OutputStream)

文章目录概念InputStream字节输入流FileInputStream文件字节输入流FileOutputStream字节输出流相关的方法&#xff08;write&#xff09;和构造器构造器注意事项文件拷贝概念 在Java中&#xff0c;字节流一般适用于处理字节数据&#xff08;诸如图片、视频&#xff09;&#x…

Netty入门笔记(一)BIO、NIO、AIO

一.Netty简介 Netty是由JBOSS提供的一个java开源框架Netty是一个异步的&#xff0c;基于事件驱动的网络应用框架&#xff0c;用以快速开发高性能&#xff0c;高可靠性的网络IO程序Netty主要针对在TCP协议下&#xff0c;面向Client端的高并发应用&#xff0c;或者peer-to-peer场…

裁剪图片原理

FileReader HTML5定义了FileReader作为文件API的重要成员用于读取文件&#xff0c;根据W3C的定义&#xff0c;FileReader接口提供了读取文件的方法和包含读取结果的事件模型。 创建实例 const reader new FileReader(); 方法 事件 Blod Blob是用来支持文件操作的。简单的…

牛客每日一题(1/12)

233的字符串题目描述 读入一个正整数n&#xff0c;代表将字符串"abc"重复n次&#xff0c;形成一个长度为3n的字符串。例如n3时&#xff0c;形成的字符串为"abcabcabc"。请你计算该字符串中有多少个"acb"子序列。答案对10^97取模。输入描述:一个正…

【计算机网络-数据链路层】局域网(LAN)

文章目录1 局域网的概念1.1 局域网的拓扑结构1.2 局域网的传输介质1.3 局域网的介质访问控制方式&#xff08;MAC&#xff09;1.4 局域网的分类2 以太网&#xff08;Ethernet&#xff0c;IEEE 802.3 标准&#xff09;2.1 以太网的传输介质2.2 以太网的网卡2.3 以太网的 MAC 地址…