vue3 script setup 语法糖用了才知道有多爽 (一)

2023-05-16

文章目录

  • 前言
  • 一、什么是setup script
  • 二、如何使用 setup script 语法糖
  • 三、setup script 有什么用
    • 1. 属性和方法无需返回
      • 属性
      • 方法
      • 小结


这里是完整的目录图片,由于整篇文章篇幅太长,拆分成了几篇来展示
在这里插入图片描述

前言

vue3 使用的越来越广泛, 公司项目开始使用 vue3 ,在 vue 3.2 之后新加入了 script setup 语法糖,上手开始看项目发现对于语法糖的使用有一些迷惑,特此整理,在整理这些内容的同时查阅了大量的资料,自己在这个过程中,对于 vue3 的理解也更深了一些 ~ 希望各位也可以从中有所收获
因为很多地方都不太理解 , 本文的分析程度比较细致 , 甚至可能到了有些太细致的程度 ~


一、什么是setup script

<script setup> 是在单文件组件中使用组合式 API 的 " 编译时 " 语法糖 ,当同时使用 单文件组件 以及 组合式 API 的时 候, <script setup> 是更为推荐的一种语法方式,它有着更多的优势
但在说这些优势之前需要先说一下,从 Vue 3.2 版本之后才开始加入了 <script setup> 语法糖,这一语法糖的加入让 Vue3 的写法有了大大的改变 ! 相对于原本 Vue 3 的语法,简单了很多很多很多 !

因为 <script setup> 语法糖是依赖于 Vue3 的,所以如果对 Vue3 还没有太多的了解,建议先学习下 Vue3 之后再开始学习 <script setup> 语法糖,直接上来搞这个理解起来容易混乱 [ 本人因为公司使用的是 Vue3+TS ,但是在此之前一直用的是 Vue2 ,直接开始看项目之后属实懵逼了,建议各位同仁循序渐进啊 ~ ]

以下是官方的介绍
在这里插入图片描述
在 Vue 3 当中我自己感觉最鲜明的变化就是 Vue 3 中引入了组合式 Api (composition API)
但是使用 Vue3 组合式 API 的时候感觉整个过程比较繁琐

  • 在 setup () 当中定义 ⇒ setup() 中 return ⇒ 模板中使用

如果需要定义一个方法的话,模板中使用这个方法的时候,需要在 setup 函数中将它返回,模板中需要用到的大量的方法和属性都需要一 一返回 , 这个过程有点难受,时不时的就会漏掉返回这一步导致变量未定义或者 xx not a function 的错误

<script>
import {defineComponent , reactive, ref} from 'vue'
export default defineComponent({
  setup(){
    // 基本类型变量
    const name = ref("你好")
    const age = ref(2023)
    // 引用类型变量
    const book = reactive({name:"月亮",age:"1919"})

    // 将变量返回
    return{
      name,
      age,
      book
    }
  }
})
</script>

<script setup> 作为 setup 方法的语法糖,在书写上更加简洁方便,在 setup 函数中,所有 ES 模块导出都被认为是暴露给上下文的值,在 <script setup> 写法中,不需要再手动写 setup(){} .可以直接在 script 标签中书写 setup 的内容,并且不需要做 return 返回处理 .
解决了 setup 需要频繁的将 声明的变量 ,函数 ,以及 import 引入的内容通过 return 向外暴漏,才能在 <template/> 中使用的问题 , setup语法糖的形式最为便捷而且更符合开发者习惯

所以使用 <script setup> 的时候

二、如何使用 setup script 语法糖

基本语法
需要启用 <script setup> 语法糖,需要在 <script> 代码块加上 setup 属性
也就是说 : 只需在 script 标签上写上 setup 就可以了

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

里面的代码会被编译成组件 setup() 函数当中的内容
<script setup><script> 的执行时机是不同的

  • 普通的 <script> 只会在组件第一次被引入的时候执行一次
  • <script setup> 中的代码会在每次组件实例被创建的时候执行

三、setup script 有什么用

1. 属性和方法无需返回

之前说 组合式API (composition API ) 写起来有些繁琐的原因在于需要手动返回模板需要的属性和方法,而在 setup script 中可以省略这一步骤
setup script 不需要写 return ,所以直接声明数据,方法就可以在模板中直接使用了

属性

在这里插入图片描述

<template>
  <div>
    <!-- 在模板中使用变量 -->
    <div> {{ name }} </div>
    <div> {{ age }} </div>
    <div> {{ book.name }} </div>
    <div> {{ book.age }} </div>
  </div>
</template>

Vue 3 setup() 语法
传统写法中我们需要在 setup 当中定义变量,并在最后 return

<script>
import {defineComponent , reactive, ref} from 'vue'
export default defineComponent({
  setup(){
    // 基本数据类型的响应式
    const name = ref("你好")
    const age = ref(2023)
    // 复杂数据类型的响应式
    const book = reactive({name:"月亮",age:"1919"})

    // 将变量返回
    return{
      name,
      age,
      book
    }
  }
})
</script>

<script setup> 语法糖的写法
不再需要对定义的变量进行 return ,我们定义的 ref reactive 变量可以直接在 template 当中直接使用

<script setup>
import {reactive, ref} from 'vue'
    // 基本类型变量
    const name = ref("你好")
    const age = ref(2023)
    // 引用类型变量
    const book = reactive({name:"月亮",age:"1919"})

</script>

方法

在这里插入图片描述

<template>
  <div>
    <!-- 在模板中使用变量 -->
    <div @click="showMessage">点击我输出信息</div>
  </div>
</template>

Vue 3 setup() 语法
传统写法中我们需要在 setup 当中定义方法,并在最后 return

<script>
import {defineComponent} from 'vue'
export default defineComponent({
  setup(){
    const showMessage = ()=>{
      console.log("hi vue3")
    }
    // 将变量返回
    return{
      showMessage
    }
  }
})
</script>

<script setup> 语法糖的写法
不再需要对定义的方法进行 return ,我们定义的方法可以直接在 template 当中直接使用

<script setup>
    const showMessage = ()=>{
      console.log("hi vue3")
    }
</script>

小结

上方的 demo 对比可以看到完全省略了 return 中的所有内容, 嗷呜,是不是非常方便呢?
<script setup> 标签中声明的 “顶层的绑定” – [包括 变量,函数声明,以及 import 引入的内容] 都是可以在模板中直接使用的
<script setup> 标签中需要声明响应式的变量,就需要使用响应式 API 来创建 ( ref() reactive() …) , 如果在 <script setup> 标签中需要用 ref() reactive() 同样是需要手动引入ref 和 reactive 的 import {reactive, ref} from 'vue'
script setup 和 setup() 函数的返回值一样, ref 在模板中使用的时候会自动被解包

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

vue3 script setup 语法糖用了才知道有多爽 (一) 的相关文章

  • Vue3之watch和watchEffect实战总结

    watch和watchEffect都是vue3中的监听器 但是在写法和使用上是有区别的 主要是介绍一下watch和watchEffect的使用方法以及他们之间的区别 watch 的工作原理 侦听特定的数据源 并在回调函数中执行副作用 它默认
  • Vue3头像(Avatar)

    效果如下图 在线预览 APIs 参数 说明 类型 默认值 必传 shape 指定头像的形状 circle square circle false size 设置头像的大小 number large small default Respons
  • vue3快速入门-Teleport传送(瞬移组件)

    Vue 的组件架构使我们能够将用户界面构建为能够精美地组织业务逻辑和表示层的组件 Teleporting是Vue 3发布带来的一项新功能 它的灵感来自React Portals 相同的门户是 React 中的一个常见功能 在 Vue2 的
  • Vue3.2中使用swiper实现层叠式轮播图

    介绍 在 vue3 中使用 swiper 实现缩略图的轮播图效果 具体如下图所示 代码
  • Vue3的fragment

    vue2时 组件的模板结构中出现多个标签时 需要使用根标签 vue3时 组件的模板结构中出现多个标签时 可以不用根标签 这是因为vue3会自动将多个标签用fragment包裹 举个例子 main js import createApp fr
  • 前端页面添加全局水印或指定页面添加水印

    前言 为了防止信息泄露或知识产权被侵犯 在web的世界里 对于图片文档等增加水印处理是十分有必要的 水印的添加根据环境可以分为两大类 前端浏览器环境添加和后端服务环境添加 今天介绍的就是通过canvas创建一张含有水印信息的背景图片 通过v
  • 拥抱vite + vue3,制作一款属于自己的音乐播放器。

    VUE3 MUSIC 拥抱vite vue3 制作一款属于自己的音乐播放器 一 项目介绍 基于 VITE VUE3 TS PINIA TAILWINDCSS 开发的音乐播放器 界面模仿网易云音乐客户端 参考 SmallRuralDog vu
  • NSIS脚本学习:判断版本并安装.NET Framework运行环境

    前言 目前开发的程序以基于 net的应用程序为主 程序开发好后 需要进行安装包的生成 及setup文件的生成 常见的是NSIS工具 之前一直用的单文件打包工具 不适合将运行环境加进去 因此开始使用更高版本的NSIS 3 06 关于判断 NE
  • 不习惯的 Vue3 起步六 の Echarts绘制下钻地图

    序 看过一些可视化大屏展示地图的例子 准备动手做做 既然要开始比制作 那么先把目标定好 做一个展示中国城市的下钻地图 使用 Vue3 Vite Typescript echarts 实现效果 准备工作 创建项目 因为准备使用Vue3 Vit
  • Vue3、setup的使用

    Vue3 setup ref reactive toRef toRefs 1 setup的使用 1 1 简介 1 2 setup注意点 1 3 定义响应式数据 1 4 toRefs 1 5 setup中执行方法 1 5 1 方式一 1 5
  • vue.js -- 条件渲染

    目录 条件渲染 v if的用法 v if v else的用法 v if v else if v else的用法 v show的用法 v if 和 v show 的区别 条件渲染 v if的用法 代码演示
  • Vue实例挂载的过程

    一 思考与分析 我们都听过知其然知其所以然这句话 那么不知道是否思考过new Vue 这个过程中究竟做了些什么 过程中是如何完成数据的绑定 又是如何将数据渲染到视图的等等 首先找到vue的构造函数 源码位置 src core instanc
  • vue3 新特性

    注册全局组件 import HelloWorld from components HelloWorld vue const app createApp App 全局挂载属性和方法 方法一 app config globalPropertie
  • vue3学习笔记(1)script引入vue3实现简单应用

    Vue3专栏入口 目录 一 脚本引入简单使用 二 双向绑定的基本表现 一 脚本引入简单使用 script引入 简单使用实现数据渲染 div h1 counter num h1 div
  • 【Vue3】在Vue3中使用reactive定义的响应式失效

    Vue3 在Vue3中使用reactive定义的响应式失效 文章目录 Vue3 在Vue3中使用reactive定义的响应式失效 Vue3 在Vue3中使用reactive定义的响应式失效 后面查出原因 解决办法 总结 Vue3 在Vue3
  • 【Vue3.0实战逐步深入系列】使用elementui组件库element-plus美化投票功能

    千字长文 熬夜更新 原创不易 多多支持 感谢大家 前言 小伙伴们大家好 前面一篇文章中我们利用vue3 0实现了一个超级简单的投票功能 虽然功能是实现了也达到了巩固vue3 0知识点的目的 但是页面没有添加任何样式也没有进行任何的UI设计
  • 初学者的初始服务器设置(Ubuntu 18.04 和 16.04 LTS)

    在本教程中 我们假设您已经全新安装了 Ubuntu Server 我们建议您的服务器使用 Ubuntu 的 LTS 版本 例如 Ubuntu 18 04 LTS 16 04 LTS 现在 安装 Ubuntu 服务器 18 04 16 04
  • 新版本的 Script# 0.6 和 ASP.NET Ajax - MicrosoftAjaxExt.js 在哪里?

    我们使用 ASP NET Ajax 即
  • 在 ScriptSharp 项目中对 C# 代码进行单元测试

    我使用 ScriptSharp 创建 RIA 应用程序 除了一些奇怪的地方之外 效果还不错 然而 使用 Firebug 查找和修复问题并不是很方便 由于 scriptsharp 还提供了一个 Dll 我希望使用一个单独的测试项目 使用 Nu
  • vue3 父传参到子(defineProps),父调子方法(defineExpose)

    父页面

随机推荐