# Vue3 setup 函数
Vue3 setup 函数
vue2 和 vue3 开发的区别
首先,目前来说 vue3 发布已经有一段时间了,但是呢,由于还处于优化完善阶段,对于 vue3 开发项目的需求不是很高,主要还是以 vue2 开发为主,但是相信,vue3 进行项目开发是大势所趋。
vue2 开发项目过程中,会存在代码冗余和结构杂乱问题,这是 vue3 主要解决的问题,vue3 可以将相关功能的代码抽离分割在一起,方便开发者快速阅读,提高项目代码的可读性和可维护性。
使用 setup 原因
在 vue3 版本中,引入了一个新的函数,叫做 setup,引入他的原因总结一下主要原因是:为了使用组合式 API,setup 函数是 Composition 的入口。
为什么不继续使用 vue2 当中的选项 API 了呢,原因也很简单,像 data、computed、methods、watch 在组织逻辑大多数的情况下都是没有问题的,但是当组件逻辑变得更加丰富,那么逻辑处理关注点就会越来越多,很容易导致组件阅读和维护成本提高,通过 setup 函数能够将该部分逻辑抽离成函数,让开发者不必在关心该部分的逻辑问题。
setup 用法
- setup 函数是组合式 API 的入口。
- setup 函数是启动页面后自动执行的函数。
- 页面中所涉及的变量和方法等,都需要写在 setup 函数中。
- 在 setup 中定义的变量、方法需要通过 return 返回出去才可以使用,否则无法在视图中使用。
- setup 函数位于 created 和 beforCreated 钩子之前,用来代替这两个钩子。
setup 可以接受哪些参数
setup 函数可以接受 props、context,其中, props 由于是响应式数据,不能直接解构赋值,context 不是响应式数据,可以通过解构赋值,setup 函数必须返回一个对象,只要返回对象,便可以向 vue2 的方式一样使用返回的属性或方法。
setup 详解
setup 函数自动执行
上边提到,setup 函数是页面打开之后自动执行的一个方法,当页面打开会自动执行 setup 函数当中的逻辑代码。
<template>
<div>
<h1>setup 函数</h1>
</div>
</template>
<script>
export default {
setup() {
console.log('我是.')
}
}
</script>
打开页面,可以看到我们输出打印的 我是.
输出在控制台。
setup 函数定义变量
组件中所有的变量都要在 setup 函数中定义,并且需要在 setup 函数最后通过 return 返回,才可以像 vue2 一样在模板中使用。
定义一个基本类型变量
在 setup 函数中,创建一个 name 参数,并且在页面中渲染该字段的内容。
<template>
<div>
<h1>setup 函数</h1>
<h1>名称:{{name}}</h1>
</div>
</template>
<script>
export default {
setup() {
const name = '我是.' // 定义一个基本类型变量
}
}
</script>
上面的代码编写完成,保存刷新页面,发现名称渲染出现问题,展示不出来,同时控制台报错告警。
出现这个问题的原因其实很简单,如果从 vue2 转到 vue3 的人很容易就遇到这种问题,因为上面提到过,在 setup 中创建的变量需要在 setup 函数最后通过 return 返回,才可以使用。
所以说修改上面的代码:
<template>
<div>
<h1>setup 函数</h1>
<h1>名称:{{name}}</h1>
</div>
</template>
<script>
export default {
setup() {
const name = '我是.' // 定义一个基本类型变量
return { name } // 将 name 参数抛出 【重要】
}
}
</script>
将创建的 name 参数抛出后,重新保存刷新页面,数据渲染就正常了。
同样,创建其他基本类型也是一样的编写方式。
<template>
<div>
<h1>setup 函数</h1>
<h1>名称:{{name}}</h1>
<h1>年龄:{{age}}</h1>
<h1>性别:{{sex}}</h1>
</div>
</template>
<script>
export default {
setup() {
const name = '我是.' // 定义一个基本类型变量
const age = 10
const sex = true
return { name, age, sex }
}
}
</script>
切记,声明的变量如果需要在页面中展示,必须使用 return 将声明的变量抛出。
setup 创建复杂数据类型
setup 函数创建复杂数据类型,例如数组,对象之类的,和基本数据类型相同,也是,必须通过 return 抛出后,才可以在页面中使用。
<template>
<div>
<h1>setup 函数</h1>
<h1>名称:{{boy.name}}</h1>
<h1>年龄:{{boy.age}}</h1>
<h1>性别:{{boy.sex}}</h1>
<p v-for="(item, index) in todo" :key="index">{{item}}</p>
</div>
</template>
<script>
export default {
setup() {
const boy = {
name: '我是.',
age: 10,
sex: true
}
const todo = ['弹吉他', '做作业', '练街舞']
return { boy, todo }
}
}
</script>
保存刷新页面,渲染正常。
setup 创建方法
除了变量,方法也是需要写在 setup 函数当中的,同时和变量一样,需要 return 抛出才可以使用。
创建方法的方式有两种,第一种就是很常见的通过 function 的方式创建,另一种使用过箭头函数的方式创建。
// 一、通过 function 的方式创建
function btn() {
console.log('按钮被点击了')
}
// 二、通过箭头函数的方式创建
const btn = () => {
console.log('按钮被点击了')
}
以上两种方式都可以创建方法。
例如:在页面添加一个按钮,点击按钮打印一段话在控制台输出。
<template>
<div>
<h1>setup 函数</h1>
<el-button type="primary" @click="btn">按钮</el-button>
</div>
</template>
<script>
export default {
setup() {
// 通过箭头函数的方式创建
const btn = () => {
console.log('按钮被点击了')
}
return { btn } // 将时间抛出
}
}
</script>
保存代码,刷新页面,点击按钮在控制台输出内容。
动态更新数据
在 vue2 里面,可以通过双向数据绑定动态修改页面内容,vue3 当然也是可以的。
例如,页面上有一个名字,点击按钮,修改名称内容。
<template>
<div>
<h1>setup 函数</h1>
<h1>姓名:{{name}}</h1>
<el-button type="primary" @click="btn">修改内容</el-button>
</div>
</template>
<script>
export default {
setup() {
const name = '.'
// 通过箭头函数的方式创建
const btn = () => {
name = '我是.'
}
return { name, btn }
}
}
</script>
保存上面代码,刷新页面,点击按钮之后,发现姓名没有变成 我是.
而是直接报错了。
为什么报错了累,稍微预告一下子,需要使用 ref 和 reactive 函数。
下篇博客再说!拜了个拜!
# Vue3 setup 函数的更多相关文章
- 熬夜总结vue3中setUp函数的2个参数详解
1.setUp函数的第1个参数props setup(props,context){} 第一个参数props: props是一个对象,包含父组件传递给子组件的所有数据. 在子组件中使用props进行接 ...
- vue3.x新特性之setup函数,看完就会用了
最近有小伙伴跟我聊起setup函数,因为习惯了vue2.x的写法导致了,setup用起来觉得奇奇怪怪的,在一些api混编的情况下,代码变得更加混乱了,个人觉得在工程化思想比较强的团队中使用setup确 ...
- vue3 学习笔记 (四)——vue3 setup() 高级用法
本篇文章干货较多,建议收藏! 从 vue2 升级到 vue3,vue3 是可以兼容 vue2 的,所以 vue3 可以采用 vue2 的选项式API.由于选项式API一个变量存在于多处,如果出现问题时 ...
- vue3渲染函数(h函数)的变化
vue3 渲染函数(h函数)的更改 h函数的更改总结 1==>h 现在全局导入,而不是作为参数传递给渲染函数 2==>渲染函数参数更改为在有状态组件和函数组件之间更加一致 3==>v ...
- Python包管理工具setuptools之setup函数参数详解
**********************************************************对所学内容的简单汇总******************************** ...
- Vue3 setup详解
setup执行的时机 在beforeCreate之前执行(一次),此时组件对象还没创建: this是undefined,不能通过this来访问data/computed/methods/props: ...
- vue3-组件中使用setup函数获取vuex中的数据的新方式
传统方式 setup() { const store = useStore() //传统方式 const aName = computed(() => store.state.name) ret ...
- 使用Inno Setup函数修改文件内容
0.inno打开文件操作&字符串操作所需函数原型及解释 function LoadStringsFromFile(const FileName: String; var S: TArrayOf ...
- 何时/如何使用 Vue3 render 函数
什么是 DOM? 如果我们把这个 HTML 加载到浏览器中,浏览器创建这些节点,用来显示网页.所以这个HTML映射到一系列DOM节点,然后我们可以使用JavaScript进行操作.例如: let it ...
随机推荐
- 《手写Mybatis》第5章:数据源的解析、创建和使用
作者:小傅哥 博客:https://bugstack.cn 沉淀.分享.成长,让自己和他人都能有所收获! 一.前言 管你吃几碗粉,有流量就行! 现在我们每天所接收的信息量越来越多,但很多的个人却没有多 ...
- 《手把手教你》系列基础篇(九十一)-java+ selenium自动化测试-框架设计基础-Logback实现日志输出-下篇(详解教程)
1.简介 为了方便查看和归档:(1)不同包的日志可能要放到不同的文件中,如service层和dao层的日志:(2)不同日志级别:调试.信息.警告和错误等也要分文件输出.所以宏哥今天主要介绍和分享的是: ...
- 【mq】从零开始实现 mq-01-生产者、消费者启动
MQ 是什么? MQ(Message Queue)消息队列,是基础数据结构中"先进先出"的一种数据结构. 指把要传输的数据(消息)放在队列中,用队列机制来实现消息传递--生产者产生 ...
- 02. 树莓派初始配置——安装rz命令
安装rz命令 如果你的ssh工具不带xftp文件上传功能,则需要安装使用ZMODEM协议的rz.sz命令. 1. 用root权限登录 2. 创建下载的目录地址(不创建也行,创建后方便以后文件管理) m ...
- 接口测试实战| GET/POST 请求区别详解
1.请求行的 method 不同:2.POST 可以附加 body,可以支持 form.json.xml.binary等各种数据格式:3.从行业通用规范的角度来说,无状态变化的建议使用 GET 请求, ...
- 攻防世界-MISC:神奇的Modbus
这是攻防世界高手进阶区的第三题,题目如下: 点击下载附件一,得到一个流量包,题目中提到的modbus,百度百科的解释如下: 用wireshark打开流量包,搜索modbus 然后鼠标右键选择追踪流,再 ...
- Linuxshell脚本-格式-变量-条件测试
1.Linuxshell脚本格式 脚本文件名称格式: 1.NAME.sh.脚本文件名称必须以 .sh 结尾 脚本编辑第一行必须包括shell声明序列:#! 添加注释,注释以#开头 2.加3执行 ...
- 常用的Linux 系统备份、恢复命令
公众号关注 「开源Linux」 回复「学习」,有我为您特别筛选的学习资料~ 删库跑路的事常常听说,不过,这只能是个调侃的话题,真正的工作中可不能这么干,否则,库是删了,路怕是跑不了了. 所以,备份很重 ...
- 实战| Nginx+keepalived 实现高可用集群
一个执着于技术的公众号 前言 今天通过两个实战案例,带大家理解Nginx+keepalived 如何实现高可用集群,在学习新知识之前您可以选择性复习之前的知识点: 给小白的 Nginx 10分钟入门指 ...
- Angular核心概念
一.集成开发环境@angular/cli IE8之后才有debugger工具 2009,nodejs发布,前端Big Bang 1.1 基于NodeJS的工具链 打包工具 grunt 对js代码做合并 ...