vue3.0中setup使用(两种用法)


Posted in Vue.js onDecember 02, 2020

一、setup函数的特性以及作用

可以确定的是 Vue3.0 是兼容 Vue2.x 版本的 也就是说我们再日常工作中 可以在 Vue3 中使用 Vue2.x 的相关语法 但是当你真正开始使用 Vue3 写项目时 你会发现他比 Vue2.x 方便的多

Vue3 的一大特性函数 ---- setup

1、setup函数是处于 生命周期函数 beforeCreate 和 Created 两个钩子函数之间的函数 也就说在 setup函数中是无法 使用 data 和 methods 中的数据和方法的

2、setup函数是 Composition API(组合API)的入口

3、在setup函数中定义的变量和方法最后都是需要 return 出去的 不然无法再模板中使用

二、setup函数的注意点

1、由于在执行 setup函数的时候,还没有执行 Created 生命周期方法,所以在 setup 函数中,无法使用 data 和 methods 的变量和方法

2、由于我们不能在 setup函数中使用 data 和 methods,所以 Vue 为了避免我们错误的使用,直接将 setup函数中的this修改成了 undefined

3、setup函数只能是同步的不能是异步的

用法1:结合ref使用

<template>
 <div id="app">
  {{name}}
  <p>{{age}}</p>
  <button @click="plusOne()">+</button>
 </div>
</template>
 
<script>
import {ref} from 'vue'
export default {
 name:'app',
 data(){
  return {
   name:'xiaosan'
  }
 },
 setup(){
  const name =ref('小四')
  const age=ref(18)
  function plusOne(){
   age.value++ //想改变值或获取值 必须.value
  }
  return { //必须返回 模板中才能使用
   name,age,plusOne
  }
 }
}
</script>

用法2:代码分割

Options API 和 Composition API 

Options API 约定:

我们需要在 props 里面设置接收参数

我们需要在 data 里面设置变量

我们需要在 computed 里面设置计算属性

我们需要在 watch 里面设置监听属性

我们需要在 methods 里面设置事件方法

你会发现 Options APi 都约定了我们该在哪个位置做什么事,这反倒在一定程度上也强制我们进行了代码分割。

现在用 Composition API,不再这么约定了,于是乎,代码组织非常灵活,我们的控制代码写在 setup 里面即可。

setup函数提供了两个参数 props和context,重要的是在setup函数里没有了this,在 vue3.0 中,访问他们变成以下形式: this.xxx=》context.xxx

我们没有了 this 上下文,没有了 Options API 的强制代码分离。Composition API 给了我们更加广阔的天地,那么我们更加需要慎重自约起来。

对于复杂的逻辑代码,我们要更加重视起 Composition API 的初心,不要吝啬使用 Composition API 来分离代码,用来切割成各种模块导出。

我们期望是这样的:

importuseAfrom'./a';
 
importuseBfrom'./b';
 
importuseCfrom'./c';
 
exportdefault{
 
setup (props) {
 
let{ a, methodsA } = useA();
 
let{ b, methodsB } = useA();
 
let{ c, methodsC } = useC();
 
return{
 
a,
 
methodsA,
 
b,
 
methodsB,
 
c,
 
methodsC
 
}
 
}
 
}

就算 setup 内容代码量越来越大,但是始终围绕着大而不乱,代码结构清晰的路子前进。

到此这篇关于vue3.0中setup使用的文章就介绍到这了,更多相关vue3.0 setup使用内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Vue.js 相关文章推荐
vue + el-form 实现的多层循环表单验证
Nov 25 Vue.js
vue中如何自定义右键菜单详解
Dec 08 Vue.js
详解Vue的异步更新实现原理
Dec 22 Vue.js
vue实现树状表格效果
Dec 29 Vue.js
vue监听键盘事件的相关总结
Jan 29 Vue.js
vue 根据选择的月份动态展示日期对应的星期几
Feb 06 Vue.js
Vue SPA 首屏优化方案
Feb 26 Vue.js
vue实现桌面向网页拖动文件的示例代码(可显示图片/音频/视频)
Mar 01 Vue.js
vue脚手架项目创建步骤详解
Mar 02 Vue.js
详解Vue的sync修饰符
May 15 Vue.js
如何理解Vue简单状态管理之store模式
May 15 Vue.js
vue使用refs获取嵌套组件中的值过程
Mar 31 Vue.js
vue3.0+vue-router+element-plus初实践
Dec 02 #Vue.js
Vue router传递参数并解决刷新页面参数丢失问题
Dec 02 #Vue.js
详解Vue3 Teleport 的实践及原理
Dec 02 #Vue.js
vue $router和$route的区别详解
Dec 02 #Vue.js
基于vue项目设置resolves.alias: '@'路径并适配webstorm
Dec 02 #Vue.js
element-plus一个vue3.xUI框架(element-ui的3.x 版初体验)
Dec 02 #Vue.js
vue组件中节流函数的失效的原因和解决方法
Dec 02 #Vue.js
You might like
PHP 中的面向对象编程:通向大型 PHP 工程的办法
2006/12/03 PHP
完美实现GIF动画缩略图的php代码
2011/01/02 PHP
php从文件夹随机读取文件的方法
2015/06/01 PHP
php使用gzip压缩传输js和css文件的方法
2015/07/29 PHP
php调用云片网接口发送短信的实现方法
2017/10/25 PHP
PHP实现模拟http请求的方法分析
2017/12/20 PHP
Javascript 两个窗体之间传值实现代码
2009/09/25 Javascript
js与jquery获取父元素,删除子元素的两种不同方法
2014/01/09 Javascript
JS实现点击链接取消跳转效果的方法
2014/01/24 Javascript
JavaScript的new date等日期函数在safari中遇到的坑
2016/10/24 Javascript
QRCode.js:基于JQuery的生成二维码JS库的使用
2017/06/23 jQuery
微信小程序 同步请求授权的详解
2017/08/04 Javascript
原生JS实现的多个彩色小球跟随鼠标移动动画效果示例
2018/02/01 Javascript
jquery ajax加载数据前台渲染方式 不用for遍历的方法
2018/08/09 jQuery
jQuery子选择器与可见性选择器实例分析
2019/06/28 jQuery
VUE 项目在IE11白屏报错 SCRIPT1002: 语法错误的解决
2020/09/27 Javascript
详解Vue 的异常处理机制
2020/11/30 Vue.js
Python自动化测试Eclipse+Pydev 搭建开发环境
2016/08/15 Python
Python  pip安装lxml出错的问题解决办法
2017/02/10 Python
运动检测ViBe算法python实现代码
2018/01/09 Python
Python中if elif else及缩进的使用简述
2018/05/31 Python
Numpy 改变数组维度的几种方法小结
2018/08/02 Python
python文本数据处理学习笔记详解
2019/06/17 Python
PyTorch的SoftMax交叉熵损失和梯度用法
2020/01/15 Python
Python根据URL地址下载文件并保存至对应目录的实现
2020/11/15 Python
python模拟点击玩游戏的实例讲解
2020/11/26 Python
澳大利亚儿童鞋在线:The Trybe
2019/07/16 全球购物
10条PHP编程习惯
2014/05/26 面试题
大学生水文观测实习自我鉴定
2013/09/29 职场文书
资金主管岗位职责范本
2014/03/04 职场文书
杭州黄龙洞导游词
2015/02/10 职场文书
公司备用金管理制度
2015/08/04 职场文书
工作建议书范文
2019/07/08 职场文书
Python深度学习之实现卷积神经网络
2021/06/05 Python
springboot利用redis、Redisson处理并发问题的操作
2021/06/18 Java/Android
instantclient客户端 连接oracle数据库
2022/04/26 Oracle