uniapp项目vue2升级vue3简单记录
看到好多开源项目都升级了vue3,看文章说vue3性能升级很多,而且组合式api很香,遂把最近开发的自助洗车app升级下,在此记录下出现的问题。
- 我是先去vue官网看了下vue3的组合式api,有个大概了解,方便升级使用。
- 然后根据uniapp升级vue3官方指南把框架层面的先更改。
- 测试访问没问题后再做代码上的更改。(vue3兼容vue2的代码风格)
把代码风格改为组合式api
简单总结组合式api就是把原有的data,methods等等这些以前分开的代码块,都可以放在一起了,其他的刚开始不要多想。因为我第一遍在看vue官网的时候,看的稀里糊涂。
- vue2的data和mehtod代码:
data() {
return {
dataA: {},
dataB: [],
...
}
},
methods: {
methodA() {},
methodB() {},
...
}
vue3的data和mehtod写法:
import {ref,reactive,toRefs} from 'vue'
setup() {
#方式1(这是我刚开始的写法)
#这个写法有个很大的弊端就是如果我定义了很多data和method后,return代码会出现很长
#return{a,b,c,d,e,f,g........}
const dataA = ref({})
const dataB = ref([])
const methodA = () => {
#注意:必须加value
console.log(dataA.value);
}
const methodB = () => {}
#必须return出去才能在view中使用
return {dataA,dataB,methodA,methodB}
#方式2(创建一个对象包裹,最后只需要返回这个对象即可)
#方式2的代码更简洁且不需要加value,跟以前使用vue2区别不大。
const v3data = reactive({
dataA:{},
dataB:{},
methodA:() => {
#无需加value
console.log(v3data.dataA);
},
methodB:() => {}
})
return {
#只需这样返回即可,toRefs的作用自行搜索,这里不做解释。
...toRefs(v3Data)
}
}
- vue2中父子组件的调用方式
#parent.vue
<template>
<div>
<child ref="childRef" @myClick="onChildClick"/>
<Button type="primary" @click="parentClick">触发子组件方法</Button>
</div>
</template>
<script>
export default {
methods: {
parentClick() {
#父组件调用子组件方法
this.$childRef.childMethod()
},
onChildClick(){
console.log('子组件调用')
}
}
}
</script>
# child .vue
<template>
<div>
<h1>子组件</h1>
<Button type="primary" @click="sonClick">触发父组件方法</Button>
</div>
</template>
<script>
export default {
methods: {
sonClick () {
#子组件调用父组件
this.$emit('myClick');
},
childMethod(){
}
}
}
</script>
vue3中父子组件的调用方式
#parent.vue
<template>
<div>
<child ref="childRef" @myClick="onChildClick"/>
<Button type="primary" @click="parentClick">触发子组件方法</Button>
</div>
</template>
<script>
import {ref,reactive,toRefs} from 'vue'
export default {
setup() {
const v3data = reactive({
#在这里定义一个和子组件ref名称相同的对象置为null,vue会自动给赋值
childRef:null,
parentClick:()=>{
#父组件调用子组件方法
v3data.childRef.childMethod()
},
onChildClick:()=>{
console.log('子组件调用')
}
})
#这里一定要return出去,否则childRef一直为null
return {...toRefs(v3Data)}
}
}
</script>
# child .vue
<template>
<div>
<h1>子组件</h1>
<Button type="primary" @click="sonClick">触发父组件方法</Button>
</div>
</template>
<script>
import {ref,reactive,toRefs} from 'vue'
export default {
setup(props,context) {
const v3data = reactive({
sonClick () {
#子组件调用父组件
context.$emit('myClick');
},
childMethod(){
}
})
return {...toRefs(v3Data)}
}
</script>
- vue3中如何替代this(官方已不推荐,只作为知识点)
import {ref,getCurrentInstance} from 'vue'
export default {
#proxy相当于vue2的this
const {proxy} = getCurrentInstance()
}
网上说提升30%性能,或许我这个项目太小,没感到明显差距,不过组合式api确实是简单方便很多。
另外vue3废弃了filter,可以改用方法调用或者computed。
先写到这里,码字不易,如有错误,请指正。
uniapp项目vue2升级vue3简单记录的更多相关文章
- vue2升级vue3:vue2 vue-i18n 升级到vue3搭配VueI18n v9
项目从vue2 升级vue3,VueI18n需要做适当的调整.主要是Vue I18n v8.x 到Vue I18n v9 or later 的变化,其中初始化: 具体可以参看:https://vue- ...
- vue2升级vue3指南(二)—— 语法warning&error篇
本文总结了vue2升级vue3可能会遇到的语法警告和错误,如果想知道怎样升级,可以查看我的上一篇文章:vue2升级vue3指南(一)-- 环境准备和构建篇 Warning 1.deep /deep/和 ...
- vue2升级vue3:Vue Demij打通vue2与vue3壁垒,构建通用组件
如果你的vue2代码之前是使用vue-class-component 类组件模式写的.选择可以使用 https://github.com/facing-dev/vue-facing-decorator ...
- vue2升级vue3指南(一)—— 环境准备和构建篇
1.nodejs和npm 注意二者的版本,版本过低需要升级,本人升级后的版本如下: $ node -v v16.15.1 $ npm -v 8.11.0 2.package.json 和依赖升级 由于 ...
- Linux中java项目环境部署,简单记录一下
这里只是简单的记录一下linux环境下面如何快速的搭配好环境,使你的项目能在linux环境上面运行. 很多时候,我们都是用windows环境进行配置调试的,而真正很多服务器都是在linux服务器上面的 ...
- 初学做uniapp项目过程梳理的一些记录
1.uniapp不显示h5头部 第一种写法: { "path" : "pages/yunshi/yunshi", "style" : { & ...
- 前端项目 node8升级到node16,代码升级汇总
背景 公司的项目是vue项目,环境是node@8x版本的,最近我创建react hook的项目,发现至少需要node14才支持,打开官网才发现node都已经到16版本了.失策啊,失策.于是直接升级到最 ...
- Android项目框架升级尝鲜OkHttp
本文来自http://blog.csdn.net/liuxian13183/ ,引用必须注明出处! 随着项目日趋稳定,需求不再总是变化,那么是时间来整理下项目了.先简单介绍下,本项目最初使用loop4 ...
- 开源项目Material Calendar View 学习记录 (一)
开源项目Material Calendar View 学习记录 Github: https://github.com/prolificinteractive/material-calendarview ...
随机推荐
- Spark周总结(一)
本周学习内容: 1.搭建虚拟机Spark环境 2.idea编写Scala脚本并在yarn上运行 总结: 这周是回家第一周,虽然没啥事,但是还是想放松放松,也是万事开头难,跟着教程做,但总有几步跟教程上 ...
- java中hashCode和equals什么关系,hashCode到底怎么用的
Object类的hashCode的用法:(新手一定要忽略本节,否则会很惨) 马 克-to-win:hashCode方法主要是Sun编写的一些数据结构比如Hashtable的hash算法中用到.因为ha ...
- DC-1 靶机渗透
DC-1 靶机渗透 *概况*: 下载地址 https://www.vulnhub.com/entry/dc-1,292/ *官方描述:* DC-1 is a purposely built vulne ...
- springcloud报错:org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'armeriaServer' defined in class path resource
spring boot配置zipkin 无法启动 加入 Zipkin Server 由于需要收集 Spring Cloud 系统的跟踪信息,以便及时地发现系统中出现的延迟升高问题并找出系统性能瓶颈的根 ...
- Python 每日提醒写博客小程序,使用pywin32、bs4库
死循环延迟调用方法,使用bs4库检索博客首页文章的日期是否与今天日期匹配,不匹配则说明今天没写文章,调用pywin32库进行弹窗提醒我写博客.
- Java实现平滑加权轮询算法--降权和提权
上一篇讲了普通轮询.加权轮询的两种实现方式,重点讲了平滑加权轮询算法,并在文末留下了悬念:节点出现分配失败时降低有效权重值:成功时提高有效权重值(但不能大于weight值). 本文在平滑加权轮询算法的 ...
- node.js - mysql
今天结束的挺早,因为今天的内容还可以不是很难,今天全程是学了一些关于mysql数据库和sql查询语句的内容包括在node终端里面怎么来连接数据库.经过今天的一个学习,我感觉离那个地步越来越近了,就是那 ...
- python中一些元组知识
元组 Python 的元组与列表类似,不同之处在于元组的元素不能修改. 元组使用小括号 ( ),列表使用方括号 [ ]. 元组创建很简单,只需要在括号中添加元素,并使用逗号隔开即可. 实例(Pytho ...
- DOM 对象的重点核心
概述 : 文档对象模型(Document Object Model,简称DOM ),是W3C组织推荐的处理可扩展标记语言 (HTML或者XML)的标准编程接口. W3C已经定义了一系列的DOM接口, ...
- Jquery_HTML-对HTML内容删除添加、操作CSS改变样式、遍历定位元素
1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="U ...