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 ... 
随机推荐
- node安装和环境配置
			参考链接: https://www.cnblogs.com/zwjphp/p/14123746.html 一.安装环境 1.本机:Windows 10 (64位) 2.Node.js:v12.13.0 ... 
- 基于Spring接口,集成Caffeine+Redis两级缓存
			原创:微信公众号 码农参上,欢迎分享,转载请保留出处. 在上一篇文章Redis+Caffeine两级缓存,让访问速度纵享丝滑中,我们介绍了3种整合Caffeine和Redis作为两级缓存使用的方法,虽 ... 
- 网络协议之:socket协议详解之Unix domain Socket
			目录 简介 什么是Unix domain Socket 使用socat来创建Unix Domain Sockets 使用ss命令来查看Unix domain Socket 使用nc连接到Unix do ... 
- Python-初见
			目录 概述 关键字 标准数据类型 Number String List Tuple Set Dictionary 删除对象 数据类型转换 推导式 运算符 迭代器与生成器 迭代器 生成器 函数 参数传递 ... 
- linux压缩打包、定时任务
			压缩打包 gzip压缩 win中的压缩包:zip rar Linux常见的压缩包有哪些? gzip bzip2 1.gzip压缩 压缩命令:gzip [压缩文件] 解压命令:gzip -d [压缩包] ... 
- 虚拟机VMware的安装与Xshell的应用
			先安装VMware 1.安装就按照提示一点点安装就行了 配置网络 打开VMware 这里的IOS映像文件在https://developer.aliyun.com/mirror/里下载 这里用方向键往 ... 
- 从实例学习 Go 语言、"并发内容" 学习笔记及心得体会、Go指南
			第一轮学习 golang "并发内容" 学习笔记,Go指南练习题目解析.使用学习资料 <Go-zh/tour tour>.记录我认为会比较容易忘记的知识点,进行补充,整 ... 
- 介绍一款倍受欢迎的.NET 开源UI库
			概述 今天要带大家了解的是一款WPF的开源控件库MahApps.Metro.MahApps.Metro是用于创建现代WPF应用程序的工具包,它许多开箱即用的好东西. 目前支持的NET Framewor ... 
- DjangoRestFramework框架三种分页功能的实现 - 在DjangoStarter项目模板中封装
			前言 继续Django后端开发系列文章.刚好遇到一个分页的需求,就记录一下. Django作为一个"全家桶"型的框架,本身啥都有,分页组件也是有的,但默认的分页组件没有对API开发 ... 
- 【分享汇总】25个主题分享,360°领略OpenHarmony最新技术版图
			2021年10月,开放原子开源基金会旗下开源项目 OpenAtom OpenHarmony (以下简称"OpenHarmony") 应邀参加华为2021 HDC 开发者大会,并组织 ... 
