VueJs中setup的使用(上)

news2025/1/18 4:42:39

前言

在写组合式API代码时,首先接触到的是setup这个函数,在一些项目代码里,你会看到有的直接在script标签上添加setup标识,有的在选项式API

方式里,以setup()函数,配置选项的方式出现在单文件组件里

什么时候用setup()函数方式,什么时候不用,对于有些新手同学,有些困惑,以及它的一个使用特点和规则,都是需要知道的

在学习setup之前,先写一个常见的数字加减的示例,介绍两个概念声明式渲染与响应式

01

数字加减选项式API实现

如下是选项式示例代码如下所示

<template>
  <div class="base-vue3-setup">
      <p><el-input-number v-model="num" @change="handleChange" :min="1"></el-input-number></p>
      <p>num: {{num}}</p>
  </div>
</template>

<script>
  export default {
    data() {
        return {
            num:0
        }
    },
    methods: {
      handleChange(value) {
        this.num = value;
      }
    },
  };
</script>
<style scoped>
  .base-vue3-setup {
    text-align: center;
  }
</style>

以上是使用选项式API实现的,响应式数据挂载在配置选项data()函数下,而方法绑定在methiods

02

数字加减组合式API实现

如下是组合式API代码

<template>
   <div class="base-vue3-setup">
      <p><el-input-number v-model="num" @change="handleChangeCom" :min="1"></el-input-number></p>
      <p>num: {{num}}</p>
  </div> 
</template>
<script setup>
import {ref} from "vue";
const num = ref(0);
function handleChangeCom(value) {
    num1.value = value;
}
</script>

以上就是通过组合式API代码实现的,响应式定义的数据直接放在函数里面,并通过ref函数包裹起来,才具备响应式能力,同时在script标签上添加setup标识

在组件的模板中可直接使用函数内定义的变量,但在逻辑代码中,若想要取到响应式变量的值时,需要通过.value的形式获取的

声明式渲染

编写Vue代码,本质上就是在编写Vue组件,而Vue基于html拓展了一套自己的模板语法,让我们可以声明式的描述最终输出的HTMLJavaScript状态之间的一个关系

当状态改变时,HTML会自动的更新,那么页面也会自动更新

响应式状态

Vue会自动跟踪JavaScript的状态,并在其发生变化时响应式的更新DOM,能在改变时触发更新状态的,就可以称为响应式数据

vue3中想要一个基本类型数据具备响应式,那么需要用ref这个组合API函数给包裹起来,经过该函数处理加工一下,就具备了响应式的能力,而对象类型数据

则需要使用reactive()API函数来声明响应式状态,这些组合式API函数都是Vue框架提供的,它是固定的,相当于是Vue对外暴露的接口

你只需要拿来即用就可以,无需关心底部是如何操作的(当然如果想深入了解,那可以看研究源码,是如何编译实现的

03

Vue中setup的两种风格

对于有些初学者,有时看到setup以属性的方式出现在script标签上,有时,又会看到,在选项式API当中以setup()函数的形式出现

那什么时候用,什么场景用呢,下面就来讲一讲的

setup直接以属性的方式写在script标签上

Vue3中,在xxx.vue单文件组件中的<script setup></script>``,会有一个setup标记,只要标记了它,那就说明,在script标签代码块内就具备了vue3的语法环境,可以使用Vue3中的一些特性,比如组合式API函数,ref,reactive`等

可以在script中声明响应式数据状态,定义声明完后,可以直接在模板中使用

比如如下:

<template>
     <!--在模板中不用.value,它会被自动解析,直接可以使用变量名--->
     {{name}}
</template>
<script setup>
  import {ref} from "vue";
  let name = ref("itclanCoder");
  //在逻辑中,想要读取name的值,需要.value方式
  console.log(name.value);
</script>

从上面的Vue3代码风格看出,它是比Vue2更简洁的,可以自由的编写javascript代码,不受约束,就是需要另一个思维方式从vue2固定编程方式走出来

setup写在标签上优势

[1]. 更少的样板内容,更简洁的代码

[2]. 能够使用纯TypeScript声明props和自定义事件

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

04

setup()以函数配置选项方式

vue3当中,它是向下兼容的,如果想要在vue2中体验vue3当中的一些新特性,在vue3中新增了一setup的配置选项

setup是一个新的配置项,值为一个函数,setup为设置,译为组合,是所有Composition API组合API表演的舞台,它是在组件中使用组合式API的入口

一般,在如下情况下使用setup()钩子

[1]. 需要在非单文件组件中使用组合式API时

[2]. 需要在基于选项式API的组合中集成基于组合式API的代码时或第三方库整合的项目中,可以用setup()函数

其他情况下,都应该优先使用<script setup></script>语法

如下代码所示

<template>
    <div>
        {{name}}
    </div>
</template>
<script>
  import { ref } from "vue";
  export default {
    // 其他配置选项
    data() {
      return {
        num: 1
      }
    },
    setup() {
      const name = ref('itclanCoder');
      // 在逻辑中访问,同样需要使用.value的方式访问
      console.log(name.value);
      // 声明的变量或函数,都需要暴露出去,否则在模板中使用,会不起作用
      return {
        name
      }
    }
  }
</script>

重点注意

[1]. 在setup()函数内定义声明的响应式数据变量或函数,都需要对外暴露出去,否则在模板中直接使用的话,是不起作用的

[2]. 在模板中可以直接使用定义的响应式数据变量,或函数,因为它可以自动解析,而在逻辑中需要使用变量.value读取

[3]. setup()函数自身并不具备对组件实例的访问权限,所以在setup()函数作用域内,访问this会是undefined,但在选项式API中可以访问组合式API对外暴露出来的值(通过this.对外暴露的变量或方法),反过来却不行,也就是在setup()中无法通过this访问选项式API配置选项下的data数据或methods方法

[4]. 当选项式API中的data数据,methods方法名与setup()内定义的变量名或函数同名时,后者会覆盖前者

[5]. 凡是组合中用到数据,方法,均要配置在setup中,并且需要通过return对外暴露出去

[6]. setup函数有两种返回值,一个是对象,另一个是函数

[7]. 如果setup()函数返回一个对象,则对象中的属性,方法,在模板中可以直接使用,但在逻辑内,普通变量需要使用.value访问读取,若返回一个渲染函数,则可以自定义渲染内容

import {h} from 'vue';
export default {
  setup() {
    // 返回一个函数
    return () => h('h1','内容')
  }
}

[8]. 如果你使用vue3组合式API,尽量不要与vue2.x配置混用

[9]. setup不能是一个async函数,因为返回值不在是return的对象,而是propmise,这样会令,模板看不到return对象中属性(其实也可以返回一个Promises实例,但需要结合Suspense和异步组件配合进行使用

05

setup函数是在什么时候执行的

setup()Vue提供的一个钩子,它的执行时机是在beforeCreate()函数之前执行的,在setup()函数里面访问thisundefined

总结

setupvue3新增的一个特性,有两种使用,一种是直接写在script标签上,此时script标签代码块内可写vue3的新特性

而在选项式API编码风格当中,若想要使用vue3,那么需要借用setup()这配置选项,所有的组合响应式API函数,响应式变量,都需要放在setup()函数里面

同时,需要对外暴露出去

两种方式都是可以使用的,不过在官方推荐的使用当中,应当优先使用setup放在script标签上,当需要基于选项式API的组合中,基于组合式API的代码时或第三方库整合的项目中,或非单文件组件中使用组合式API时,可以用setup()函数

vuejs中组件的两种不同的编写风格-选项式API及组合式API

2022-12-25

ccabdb3a7735769dc50ca4b8cfc02e9e.jpeg

2022-忙碌的一年

2022-12-23

f79d5973de78d2cf9bf4b79c2a8e3f54.jpeg

JS 如何利用浏览器的 cookie 保存用户名

2022-11-09

d5d9457d78934b4f5283a9682175cae4.jpeg

JS如何使用sessionStorage实现计数器功能

2022-11-08

730b6b520960700ec2e977624026d02f.jpeg
点击左下角查看更多

69724bdff97dc8120ec914fcb7570f50.gif

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

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

相关文章

聚观早报 | 特斯拉上海工厂被曝停产;富士相机X-Pro 3已停产

今日要闻&#xff1a;特斯拉上海工厂被曝停产&#xff1b;富士相机X-Pro 3已停产&#xff1b;字节复活红果小说App&#xff1b;网易云音乐首份乐评报告发布&#xff1b;辛巴年货节单场带货超1400万单特斯拉上海工厂被曝停产 12 月 26 日消息&#xff0c;根据一份内部通知和两位…

十八、Docker可视化管理工具Portainer

1、概述 Portainer分两个版本 开源版本&#xff1a;Portainer Community Edition (CE) 和商业版本&#xff1a;Portainer 商业版 (BE)。 CE 拥有超过 50 万的普通用户&#xff0c;是一个功能强大的开源工具集&#xff0c;可让您轻松地在 Docker、Docker Swarm、Kubernetes 和…

SpingBoot常见注解区分

1、Mapper注解&#xff1a; 作用&#xff1a;在接口类上添加了Mapper&#xff0c;在编译之后会生成相应的接口实现类 添加位置&#xff1a;接口类上面 Mapper public interface UserMapper{/*** param username 用户名* param password 密码* param memberLevelId 会员级别* p…

【Pygame实战】俄罗斯方块 | 太好玩了~停不下来,这种版本(Turtle彩版)你肯定没玩过……(经典怀旧:无人不知的俄罗斯方块)

导语 警报警报&#xff01;听说CSDN游戏专区火了火了~竟然是因为各种形状的方块。 对&#xff01;各种游戏都快烂大街了&#xff0c;俄罗斯方块咋滴就不能火一把了&#xff1f; Python版俄罗斯方块 等你来战&#xff01; 所有文章完整的素材源码都在&#x1f447;&#x1f447;…

分库分表必知

概述 为啥要进行分库分表&#xff1f; 单表数据量太大&#xff0c;比如超过5000w行&#xff0c;查询时扫描的行太多&#xff0c;SQL效率低&#xff0c;CPU出现瓶颈 数据的切分就是通过某种特定的条件&#xff0c;将存放在同一个数据库或同一个表的数据分散存放到多个数据库&a…

干货 | 数字经济创新创业——网络安全

下文整理自清华大学大数据能力提升项目能力提升模块课程“Innovation & Entrepreneurship for Digital Economy”&#xff08;数字经济创新创业课程)的精彩内容。主讲嘉宾&#xff1a;Kris Singh: CEO at SRII, Palo Alto, CaliforniaVisiting Professor of Tsinghua Unive…

在 ArcGIS 中使用函数块给字段赋随机值 (指定范围内随机编号)

在 ArcMap 或 ArcGIS Pro 中通过使用字段计算器,给字段赋随机值。 通过字段计算器内置的 VB、Python 方法可以构建函数块表达式实现各种各样的赋值操作,下面我们来看看通过使用内置的 Python 函数块来实现随机赋值。 (也可以制作成工具箱哦,更加方便) ArcMap 生成随机值…

智能开关继电器-选型篇2

继电器在智能开关中承担着开通、关断的功能&#xff0c;是开关产品最根本的一项功能。这样一个关键的器件我们将分为两个篇章进行撰写&#xff1a;选型篇1、选型篇2、评估篇。其中选型篇1简述继电器的定义、分类&#xff0c;可参考《智能开关继电器-选型篇1》。选型篇2会在基于…

【TypeScript】类型声明文件的讲解与使用

目录 简介 文件类型 类型声明文件使用 简介 我们发现今天所有的JS应用都会引入许多第三方库来完成任务需求。这些第三方库无论是否是TS编写的最终都会编译成JS代码给开发者使用。我们知道TS提供了类型才有了代码提示和类型保护机制&#xff0c;但我们引入的第三方库都会有相…

搞懂 Spark 系列之 Spark Shuffle 的前世今生

注&#xff1a;本文已首发于PowerData公众号&#xff01; 1 Spark Shuffle 是什么&#xff1f; Shuffle 中文意思是“洗牌&#xff0c;混洗”&#xff0c;而在 Hadoop 的 MapReduce 框架中&#xff0c;Shuffle 是 Map 和 Reduce 中间必不可少的连接桥梁。数据在从Map 阶段结束…

优化器核心技术—Join Reorder

Join Reorder 的简介 Join Reorder 是开务数据库 SQL 优化器中的核心优化算法&#xff0c;开务数据库优化器包括 RBO 和 CBO 两部分&#xff0c;负责计划优化&#xff0c;提升 SQL 执行性能。Join Reorder 能够保证在复杂查询执行的场景下&#xff0c;枚举合法的执行路径&…

分布式系统稳定性建设指南

来源&#xff1a; 中国信息通信研究院 系统稳定性能建设是一个系统化工程&#xff0c;需要硬件软件&#xff0c;需要从企业工程建设的全环节进行设计和实施&#xff0c;充分利用以混沌工程、全链路压测为代表的分布式稳定性保障技术&#xff0c;建设保障能力&#xff0c;改造运…

域名系统 DNS(计算机网络-应用层)

目录 互联网的域名结构 顶级域名 TLD(Top Level Domain) 域名服务器 域名系统 DNS 域名解析的过程 域名服务器的四种类型 本地域名服务器 DNS 协议 DNS缓存 DNS提供的其它服务 互联网的域名结构 域名系统 DNS (Domain Name System)&#xff0c;实现主机名&#xff08;域…

(三)HTTPTomcatServlet

一、HTTP HyperText Transfer Protocol&#xff0c;超文本传输协议&#xff0c;规定了浏览器和服务器之间数据传输的规则。 HTTP协议特点&#xff1a; &#xff08;1&#xff09;基于TCP协议&#xff1a;面向连接&#xff0c;安全 &#xff08;2&#xff09;基于请求-响应模型的…

漫画 | JavaScript杀死了编程......

上班路上&#xff0c;张大胖突然想到一个点子。晚上&#xff0c;张大胖开工&#xff0c;决定把好点子给实现了。JavaScript开发效率贼高&#xff0c;项目迅速完成。项目开源发布&#xff0c;获得了不少用户&#xff0c;收获了不少star&#xff0c;张大胖非常满意。转眼间&#…

【GlobalMapper精品教程】039:GM面状数据符号化设置案例教程

GM面状数据符号化设置案例教程。 文章目录 一、使用基于分类或自定义样式的默认样式二、对所有要素使用相同样式三、基于属性/名称值应用样式四、随机指定颜色给要素一、使用基于分类或自定义样式的默认样式 该样式类似于其他GIS软件的单一样式,即为数据加载的默认样式。加载…

Stable Diffusion攻略集(Stable Diffusion官方文档、kaggle notebook、webui资源帖)

文章目录第一部分一、 Features&#xff1a;Textual Inversion&#xff08;文本反转&#xff09;1.1 Textual Inversion 简介1.1.1 摘要1.1.2 算法1.1.3 模型效果1.2 Textual Inversion of webai1.2.1 预训练embedding用于图片生成1.2.2 训练embedding1.2.3 Finding embeddings…

【Redis】知识体系结构构建以及常见考题汇总

【Redis】知识体系结构构建以及常见考题汇总1、思维导图2、Redis体系结构&#xff1a;原理、部署2.1、Redis实现原理2.1.1、Redis中数据结构2.1.2、不同对象的数据类型&#xff08;基本类型、特殊类型&#xff09;2.2、Redis部署2.2.1、基本配置&#xff08;缓存的更新、删除和…

【Linux】基础命令

目录 1.ls指令 2.pwd指令 3.cd指令 4.touch指令 5.mkdir指令 6.rmdir指令 && rm 指令 7.man指令 8.cp指令 9.mv指令 10.cat指令 11.less指令 12. head和tail 13.date指令 14.grep指令 15.bc指令 16.重要的几个热键 1.ls指令 语法&#xff1a;ls 选项 …

Taro React组件开发(2) —— RuiEditor 富文本编辑器【兼容H5和微信小程序】

1. 富文本编辑器需求分析 需要实现图片上传显示,上传使用Taro的 chooseImage 和 uploadFile,完成图片的上传!!!文字的居左、居中、居右展示,使用格式化方法 format!!!文字的加粗、倾斜、下划线,使用格式化方法 format!!!2. 富文本编辑 获取提示文本 placeholder;…