【Vue】初步认识<script setup>语法糖和组合式 API

news2024/12/24 21:35:09

▒ 目录 ▒

    • 🛫 导读
      • 需求
      • 开发环境
    • 1️⃣ `

🛫 导读

需求

最近写代码的时候,发现<script setup>这样的代码,没见过,好奇,想知道。
所以就有了这篇文章。

很多文章都说setup是vue3的特权。但是,vue2.7以后,vue2也有了这样的特性,所以大胆的去学习吧。

开发环境

版本号描述
文章日期2023-10-30
vue2.7

1️⃣ <script setup>

相比普通script语法的优势

<script setup>是在单文件组件 (SFC) 中使用组合式 API的编译时语法糖。

  • 更少的样板内容,更简洁的代码
  • 能够使用纯 Typescript 声明 props 和抛出事件。
  • 更好的运行时性能 (其模板会被编译成与其同一作用域的渲染函数,没有任何的中间代理)。
  • 更好的 IDE 类型推断性能 (减少语言服务器从代码中抽离类型的工作)。

语法

要使用这个语法,需要将 setup 属性添加到script代码块上

<script setup>
	console.log('hello script setup')
</script>

顶层的绑定会被暴露给模板

  • 任何在 <script setup> 声明的顶层的绑定 (包括变量,函数声明,以及 import 引入的内容) 都能在模板中直接使用
  • import 导入的内容也会以同样的方式暴露。意味着可以在模板表达式中直接使用导入的 helper 函数,并不需要通过 methods 选项来暴露它:
<script setup>
// import 出来的变量
import { capitalize } from './helpers'
// 变量
const msg = 'Hello!'
// 函数
function log() {
  console.log(msg)
}
</script>

<template>
  <div @click="log">{{ msg }}</div>
  <div>{{ capitalize('hello') }}</div>
</template>

组件

  • 直接使用
    <script setup>范围里的值也能被直接作为自定义组件的标签名使用:
<script setup>
import MyComponent from './MyComponent.vue'
</script>

<template>
  <MyComponent />
</template>

  • 动态组件
    由于组件被引用为变量而不是作为字符串键来注册的,在
<script setup>
import Foo from './Foo.vue'
import Bar from './Bar.vue'
</script>

<template>
  <component :is="Foo" />
  <component :is="someCondition ? Foo : Bar" />
</template>

顶层 await

<script setup> 中可以使用顶层 await。结果代码会被编译成async setup()
注意,async setup() 必须与 Suspense 组合使用,Suspense 目前还是处于实验阶段的特性

2️⃣ 组合式 API

TIP
这个 FAQ 假定你已经有一些使用 Vue 的经验,特别是用选项式 API 使用 Vue 2 的经验。

概念

组合式 API (Composition API) 是一系列 API 的集合,使我们可以使用函数而不是声明选项的方式书写 Vue 组件。
其中涵盖了以下方面的 API:

  • 响应式 API:例如 ref() 和 reactive(),使我们可以直接创建响应式状态、计算属性和侦听器。
  • 生命周期钩子:例如 onMounted() 和 onUnmounted(),使我们可以在组件各个生命周期阶段添加逻辑。
  • 依赖注入:例如 provide() 和 inject(),使我们可以在使用响应式 API 时,利用 Vue 的依赖注入系统。

可以在官网https://cn.vuejs.org/api/查看组合式 API列表。
在这里插入图片描述
对应的,选项式 API列表如下:
在这里插入图片描述

常用方法

  • ref:可以接受一个参数值并返回一个响应式且可改变的对象。
  • defineProps:父传子,定义属性
  • defineEmits:子传父
  • defineExpose:明确要暴露出去的属性
  • onMounted、onUnmounted:生命周期相关
  • inject:注入

优缺点

选项式API组合式API
优点新手上手简单可读性和可维护性高,基于函数组合的 API 更好的重用逻辑代码(在vue2 Options API中通过Mixins重用逻辑代码,容易发生命名冲突且关系不清)
跟一个功能相关的东西放在一个地方,它是目前最合理也是最容易维护的(可以将每一个功能相关所有的东西比如methods,computed都放在如上图的function中,这个function可以独立的存在,可以放在一个TS文件中,也可在npm中单独发布,最终Composition API把他们组合起来)
缺点一个功能往往需要在不同的vue配置项中定义属性和方法,比较分散。(一个methods中可能包含很多个方法,往往分不清哪个方法对应着哪个功能,而且当你想要新增一个功能的时候你可能需要在 data,methods,computed,watch中都要写一些东西,特别影响效率。)学习成本可能会增加,以前的思维方式也要转变
thisthis指向不明减少了this指向不明的情况
命名冲突引用名称冲突不存在冲突问题
图示在这里插入图片描述在这里插入图片描述

🛬 文章小结

📖 参考资料

  • vue3中的单文件组件<script setup>详解 https://blog.csdn.net/qq_41880073/article/details/124199104
  • 迁移至 Vue 2.7 https://v2.cn.vuejs.org/v2/guide/migration-vue-2-7.html
  • vue3学习(2)选项式API和组合式API的区别 https://juejin.cn/post/6966606592024576013

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

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

相关文章

2023.10.29 关于 HashTable 和 ConcurrentHashMap 区别

目录 HashTable ConcurrentHashMap 优化点一 优化点二 优化点三 优化点四 不关键的小区别 HashTable HashMap 和 HashTable 都是常见的哈希表数据结构&#xff0c;用于存储键值对 注意&#xff1a; HashMap 是线程不安全的HashTable 是线程安全的&#xff0c;其关键方法…

MapBox获取点位高程的三种方式

以下提供了三种方法和思路 1&#xff0c;通过mapbox全球dem数据获取高程 这里我们利用了mapbox的tilequery 官网地址在这里 https://docs.mapbox.com/api/maps/tilequery/ 以下是示例代码&#xff0c;这个方式是简单快捷&#xff0c;缺点就是精度不高&#xff0c;大概是以10m…

世界前沿技术发展报告2023《世界航空技术发展报告》(五)直升机技术

&#xff08;五&#xff09;直升机技术 1.常规直升机技术1.1 北约六国联合启动下一代旋翼飞行器能力项目1.2 美国和法国重视发展有人/无人直升机编组能力1.3 美国“黑鹰”直升机完成不载人全自主飞行 2.新概念直升机技术2.1 美国“劫掠者”X型直升机参与陆军“未来攻击侦察机”…

【电路笔记】-交流电感和感抗

交流电感和感抗 文章目录 交流电感和感抗1、概述1.1 电感1.2 电感器 2、频率特性2.1 电抗(Reactance)2.2 相移2.3 感应现象 3、RL滤波器4、总结 在之前有 交流电阻的文章中&#xff0c;我们已经看到电阻器在正常频率下的直流或交流状态下的行为是相同的。 然而&#xff0c;其他…

吃透进程地址空间,理清OS内存管理机制

文章目录 一、前言二、细说进程地址空间1、一段测试的代码2、引入地址空间① 富豪与他的私生子&#x1f468;② 38线竟是这么来的&#xff01;③ 地址空间的深层理解 三、分页 & 虚拟地址空间1、页表的概念2、疑难解答&#xff1a;为何父子进程没有发生同步修改&#xff1f…

注意点细节

部署esxi: VLAN 装esxi的时候如果没有设置trunk就不要设置VLAN&#xff0c; 否则无法访问 。 设置了trunk接口才设置VLAN&#xff0c;否则无法访问 部署esxi: DNS dns服务器配置&#xff1a; esxi 上的配置 部署ESXI &#xff1a;RAID 生成环境中需要先设置RAID 作为系统…

协同网络入侵检测CIDS

协同网络入侵检测CIDS 1、概念2、CIDS的分类3、解决办法4、CIDS模型5、挑战与不足 ⚠申明&#xff1a; 未经许可&#xff0c;禁止以任何形式转载&#xff0c;若要引用&#xff0c;请标注链接地址。 全文共计2598字&#xff0c;阅读大概需要3分钟 &#x1f308;更多学习内容&…

Spring Security授权架构介绍

授权架构重点在于从 Authentication 中获得该认证所具有的权限 GrantedAuthority&#xff0c;以及对请求或路径设置访问所需权限。 GrantedAuthority 在之前的Spring Security&#xff1a;认证架构中&#xff0c;我们已经介绍了在 Authentication 中存储 GrantedAuthority 的…

21. 合并两个有序链表、Leetcode的Python实现

博客主页&#xff1a;&#x1f3c6;看看是李XX还是李歘歘 &#x1f3c6; &#x1f33a;每天不定期分享一些包括但不限于计算机基础、算法、后端开发相关的知识点&#xff0c;以及职场小菜鸡的生活。&#x1f33a; &#x1f497;点关注不迷路&#xff0c;总有一些&#x1f4d6;知…

自相矛盾的LLM幻觉:评估、检测、缓解10.30

自相矛盾的LLM幻觉&#xff1a;评估、检测、缓解 摘要引言相关工作定义和激励自我矛盾4 触发、检测和减轻自相矛盾的行为5 实例化到开放文本生成6 实验 摘要 大型语言模型&#xff08;Large LMs&#xff09;容易产生包含虚构内容的文本。其中一个重要问题是自相矛盾&#xff0…

windows server 2016-IIS静态服务器-设置详细过程

文章目录 1.打开仪表盘新建角色2.iis功能模块3.启动服务器4.优点 1.打开仪表盘新建角色 2.iis功能模块 能选上的尽量选上&#xff0c;除非知道自己用不上。 然后确认&#xff0c;下一步&#xff0c;安装。 3.启动服务器 搜索IIS&#xff0c;启动IIS管理器。 启动网站。 右…

【杂记】Filter过滤器和Interceptor拦截器的区别

过滤器Filter与拦截器Interception区别&#xff1f; 包的位置不同。 filter位于tomcat里面&#xff0c;interception位于Spring-webmvc filter位置&#xff1a; interceptor位置&#xff1a; 实现方式不同。在自定义的时候&#xff0c;filter我们可以实现Filter接口&#xf…

精品Python产品销售数据可视化大屏系统-仓库出入库进销存储

《[含文档PPT源码等]精品基于Python的产品销售数据可视化系统的设计与实现》该项目含有源码、文档、PPT、配套开发软件、软件安装教程、项目发布教程、包运行成功&#xff01; 软件开发环境及开发工具&#xff1a; 开发语言&#xff1a;python 使用框架&#xff1a;Django …

组学数据上传(六)|GEO数据库数据上传实操

最近有些老师反馈文章发表时要求提供GEO登录号,如:GSEXXXX&#xff0c;问要怎么获取这种登录号?这时就需要把数据上传至GEO数据库了。还在等什么&#xff0c;跟着小编了解下GEO数据库&#xff0c;手把手教您上传数据至GEO数据库。 GEO数据库全称GENE EXPRESSION OMNIBUS&…

北京新一代信息技术产教联合体成立,360以ISC安全课助力建设工作

10月29日&#xff0c;北京新一代信息技术产教联合体&#xff08;简称联合体&#xff09;成立大会在北京360大厦A座报告厅成功举行。本次大会在中关村科技园区朝阳园管理委员会、北京市教委职业教育与成人教育处的指导下&#xff0c;由360数字安全集团、北京电子城高科技集团股份…

产品经理如何写好互联网产品说明书

互联网产品说明书是产品经理在产品开发过程中必不可少的文档之一。它起到了明确产品的功能和特性的作用&#xff0c;帮助团队成员更好地理解和掌握产品的核心功能。因此&#xff0c;作为产品经理&#xff0c;应该重视互联网产品说明书。那么产品经理该如何写好互联网产品说明书…

Mac电脑VS Code配置Flutter开发环境(图文超详细)

一、安装Android Studio 官网地址&#xff1a; https://developer.android.google.cn/ 历史版本下载地址&#xff1a; https://developer.android.com/studio/archive?hlzh-cn 二、安装Xcode 到App Store下载安装最新版本&#xff0c;如果MacOS更新不到13.0以上就无法安装…

【多线程面试题十四】、说一说synchronized的底层实现原理

文章底部有个人公众号&#xff1a;热爱技术的小郑。主要分享开发知识、学习资料、毕业设计指导等。有兴趣的可以关注一下。为何分享&#xff1f; 踩过的坑没必要让别人在再踩&#xff0c;自己复盘也能加深记忆。利己利人、所谓双赢。 面试官&#xff1a;说一说synchronized的底…

三分钟带你了解JS、原型、原型链

1.什么是JS&#xff1f; JavaScript是一种基于对象的脚本语言&#xff0c;它不仅可以创建对象&#xff0c;也能使用现有的对象&#xff1b; 它是基于原型编程、多范式的动态脚本语言&#xff0c;并且支持面向对象、命令式、声明式、函数式编程范式&#xff1b; 白话一点说就是…

算法的时间复杂度及空间复杂度

目录 一、前言 二、时间复杂度 1.时间复杂度定义 2.时间复杂度描述方法 三、实例代码 实例1&#xff08;取影响最大的项&#xff09; 实例2&#xff08;舍去系数&#xff09; 实例3&#xff08;不确定大小关系的用max函数取最大&#xff09; 实例4&#xff08;常数次的…