vue3中的setup到底是什么?

news/2024/11/7 5:02:02/

组合式api几乎都要写在setup里,学习vue3的第一步就是学习setup,如果开始的时候没有拿下setup,后面会越学越乱。

一.setup概述

setup是vue3中一个新的配置项,组件中所用到的数据、方法、计算属性,均配置在setup中。

在Vue 2中,我们通常使用 data 和 methods 来定义组件的数据和方法。

javascript"><template><div class="container"><p>我的名字:{{ name }}</p><p>我的年龄:{{ age }}</p><button @click="changeName">更改名字</button><button @click="changeAge">更改年龄</button></div>
</template><script lang="ts">export  default{name:"cat",data(){return{name:"清清ww",age:"3"}},methods:{changeName(){this.name = "大头"},changeAge(){this.age = "4"}}}
</script>

而在Vue 3中,这些内容都应该被写入 setup 函数中。既然setup是一个新的配置项,那它应该是和data、methods这些配置项是同级的,所以,我们应该这样把它加进去:

javascript"><script lang="ts">export  default{name:"cat",// 数据data(){return{name:"清清ww",age:"3"}},// 方法methods:{changeName(){this.name = "大头"},changeAge(){this.age = "4"}},// setupsetup(){}}
</script>

那么它有什么用呢?

data、methods是vue2中选项式Api的写法,既然有的新的组合式Api,新的配置项setup,那之前的数据和方法就不应该放在旧的配置项中了,它们应该被写入新的配置项setup中,像这样;

javascript">
<script lang="ts">
import { ref } from "vue"export  default{name:"cat",// setupsetup(){// 数据const name = ref("清清ww") // 保证数据是响应式的const age = ref("3")// 方法function changeName (){name.value = "大头"}function changeAge (){age.value = "4"}return { name , age ,changeName ,changeAge}}}
</script>

注意setup函数在组件实例被创建之前调用,因此它不能访问this上下文。所有的响应式数据和函数都应该在setup函数内部定义。如果打印出this,会发现它是undefined。

二.setup返回值

setup 函数的返回值会暴露给模板和其他选项式API,如computedwatch等。

在上面的例子中,如果不把 name , age ,changeName ,changeAge这些 return 出去的话,那么模板中是不能用的。

三.setup与optionsApi

问题1:data和methods可以同时存在吗?

可以。


问题2:data可以读取setup里的数据吗?

可以。因为setup的创建周期比data执行的早。


问题3:setup可以读取data里的数据吗?

不行。因为上文说了,setup中不能用this。


也就是说,如果不想完全迁移到Composition API,setup 函数可以与选项式API共存,但要注意它们之间的优先级和覆盖规则。简单来说,旧的可以访问新的,新的不能访问旧的。

四.setup语法糖

当setup中定义的变量或者方法过多的时候,你就会发现把他们一个一个的return出去是很麻烦的,因此,就有了setup语法糖。使用 <script setup> 标签,我们可以省略 setup 函数的调用,并且可以直接在模板中使用setup中定义的响应式数据和函数。

javascript"><script lang="ts">export  default{name:"cat",}
</script><script lang="ts" setup>
import { ref } from "vue";// 数据const name = ref("清清ww") // 保证数据是响应式的const age = ref("3")// 方法function changeName (){name.value = "大头"}function changeAge (){age.value = "4"}
</script>

问题1:这两个script标签可以写在一起吗?

不行。一个是专门配置组合式Api的,一个是专门配置组件名字的。


问题2:可是两个看着太难受了,如果非要写在一起呢?

那就借助插件.

1.安装插件

javascript">npm i vite-plugin-vue-setup-extend -D

2.在vite.config.js中引入

import VueSetupExtend from 'vite-plugin-vue-setup-extend'

3.在vite.config.js中调用

plugins: [vue(),VueSetupExtend()
]

然后就可以在script标签中加上name属性;


<script lang="ts" setup name="cat">
import { ref } from "vue";// 数据const name = ref("清清ww") // 保证数据是响应式的const age = ref("3")// 方法function changeName (){name.value = "大头"}function changeAge (){age.value = "4"}
</script>

本文结束~


http://www.ppmy.cn/news/1544963.html

相关文章

搜索引擎之shodan(一):初始化及安装

声明&#xff1a;学习素材来自b站up【泷羽Sec】&#xff0c;侵删&#xff0c;若阅读过程中有相关方面的不足&#xff0c;还请指正&#xff0c;本文只做相关技术分享,切莫从事违法等相关行为&#xff0c;本人一律不承担一切后果 引言&#xff1a; 1.Shodan 是一个专门用于搜索连…

【k8s】-Pod镜像拉取失败问题

创建镜像仓库secrets kubectl -n kube-system create secret docker-registry harbor-secret \--docker-username=admin --docker-password=test \--docker-server=registry.bcbx.com下述两种方式二选一即可前置准备需要安装上述的方式进行创建镜像仓库通过kubectl进行更新 #…

oneplus6--qualcomm-QXDM-QPST-boot_stuck_log.md

https://mirrors.lolinet.com/software/windows/Qualcomm/ : QPST, QXDM, QUD https://www.txrjy.com/thread-1147195-1-1.html : QXDM.4.0.450.2_PATCHED.zip : 已上传到自家仓库 https://bbs.oneplus.com/thread/3447052 : 打开手机全部端口: 手机拨号盘输入*#801# https:…

二、应用层,《计算机网络(自顶向下方法 第7版,James F.Kurose,Keith W.Ross)》

文章目录 零、前言一、应用层协议原理1.1 网络应用的体系结构1.1.1 客户-服务器(C/S)体系结构1.1.2 对等体&#xff08;P2P&#xff09;体系结构1.1.3 C/S 和 P2P体系结构的混合体 1.2 进程通信1.2.1 问题1&#xff1a;对进程进行编址&#xff08;addressing&#xff09;&#…

配置文件中ribbon.ReadTimeout属性

ribbon.ReadTimeout属性是Ribbon客户端配置中的一个关键参数&#xff0c;用于设置从服务器读取数据的超时时间。Ribbon是一个负载均衡客户端&#xff0c;它可以在微服务架构中帮助服务消费者以客户端负载均衡的方式调用服务提供者。以下是关于ribbon.ReadTimeout属性的详细介绍…

【AI日记】24.11.06 我对投资的一点浅见

【AI论文解读】【AI知识点】【AI小项目】【AI战略思考】【AI日记】 投资学习 内容&#xff1a;看投资大佬访谈或演讲B站地址&#xff1a;巴菲特1998年佛州大学讲座目标&#xff1a;学习巴菲特的投资哲学和人生智慧时间&#xff1a;2小时评估&#xff1a;非常不错&#xff0c;值…

Centos开机自启动脚本示例

本文建议创建一个sh文件管理自启动的各项内容&#xff0c;再将sh文件设置开机启动 在/root/autoshell下创建一个autostart.sh&#xff0c;内容如下 #!/bin/bash # description:开机自启脚本# 启动mongodb sh /root/software/mongodb-linux-x86_64-rhel70-4.0.6/bin/mongod --c…

硬件基础06 滤波器——无源、有源(含Filter Solutions、Filter Pro、MATLAB Fdatool)

推荐设计RC无源滤波器使用&#xff0c;数字滤波器可以使用MATLAB&#xff0c;有源滤波器使用Filter Pro。 一、Filter Solutions 1、软件资源及安装教程如下 FilterSolutions14.1.rar资源 &#xff08;1&#xff09;、双击FS14_1_0.exe进行安装&#xff1b;不要安装到中文路…