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 相关文章推荐
深入了解Vue3模板编译原理
Nov 19 Vue.js
使用vue编写h5公众号跳转小程序的实现代码
Nov 27 Vue.js
在vue中动态修改css其中一个属性值操作
Dec 07 Vue.js
详解Vue的异步更新实现原理
Dec 22 Vue.js
vue实现图书管理系统
Dec 29 Vue.js
vue前端和Django后端如何查询一定时间段内的数据
Feb 28 Vue.js
vue 中 get / delete 传递数组参数方法
Mar 23 Vue.js
使用这 6个Vue加载动画库来减少我们网站的跳出率
May 18 Vue.js
VUE解决跨域问题Access to XMLHttpRequest at
May 06 Vue.js
vue ant design 封装弹窗表单的使用
Jun 01 Vue.js
Vue2项目中对百度地图的封装使用详解
Jun 16 Vue.js
el-table-column 内容不自动换行的解决方法
Aug 14 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中eclipse 用空格替换 tab键
2013/06/24 PHP
php上传图片存入数据库示例分享
2014/03/11 PHP
php表单文件iframe异步上传实例讲解
2017/07/26 PHP
PHP的微信支付接口使用方法讲解
2019/03/08 PHP
CSS(js)限制页面显示的文本字符长度
2012/12/27 Javascript
javascript重写alert方法的实例代码
2013/03/29 Javascript
浅谈javascript 函数内部属性
2015/01/21 Javascript
JavaScript学习笔记之基础语法
2015/01/22 Javascript
JS实现自动固定顶部的悬浮菜单栏效果
2015/09/16 Javascript
Angularjs 创建可复用组件实例代码
2016/10/09 Javascript
javascript 动态样式添加的简单实现
2016/10/11 Javascript
jQuery实现两个select控件的互移操作
2016/12/22 Javascript
整理关于Bootstrap过渡动画的慕课笔记
2017/03/29 Javascript
xmlplus组件设计系列之树(Tree)(9)
2017/05/02 Javascript
js实现QQ面板拖拽效果(慕课网DOM事件探秘)(全)
2017/09/19 Javascript
详解微信小程序之scroll-view的flex布局问题
2019/01/16 Javascript
VUE实现强制渲染,强制更新
2019/10/29 Javascript
node.js中npm包管理工具用法分析
2020/02/14 Javascript
Python常用正则表达式符号浅析
2014/08/13 Python
Python列表计数及插入实例
2014/12/17 Python
Python处理RSS、ATOM模块FEEDPARSER介绍
2015/02/18 Python
Python中线程的MQ消息队列实现以及消息队列的优点解析
2016/06/29 Python
Python实现的科学计算器功能示例
2017/08/04 Python
有趣的python小程序分享
2017/12/05 Python
python感知机实现代码
2019/01/18 Python
详解Django配置JWT认证方式
2020/05/09 Python
总结Pyinstaller的坑及终极解决方法(小结)
2020/09/21 Python
巴西图书和电子产品购物网站:Saraiva
2017/06/07 全球购物
美国定制钻石订婚戒指:Ritani
2017/12/08 全球购物
Happy Socks英国官网:购买五颜六色的袜子
2020/11/03 全球购物
汽车专业学生自我评价
2014/01/19 职场文书
《理想》教学反思
2014/02/17 职场文书
教师师德师风个人整改方案
2014/09/18 职场文书
党员“一帮一”活动总结
2015/05/07 职场文书
MySQL 主从复制数据不一致的解决方法
2022/03/18 MySQL
Vue组件更新数据v-model不生效的解决
2022/04/02 Vue.js