vue2与Vue3的细微区别

vue2和vue3的区别其实没多少,总结来说一共就下面这几样

一 性能提升

  • vue3打包大小减少了41%,比Vue3更快,
  • 初次渲染快55%,更新渲染快133%
  • 内存减少54%,
  • 使用proxy代替definePropety实现数据响应式
  • 重写虚拟dom的实现和Tree-Shaking

二 新增特征

  • CompositionAPI
  • setup
  • ref,reactive

下面会讲用法

三 创建的区别

vue3创建:使用vite创建

  • npm i vitea-app 自己项目的名字
  • cd 项目(创建完了会有提示)
  • npm i 
  • npm run dev(在vue2中是npm run serve)

setup的使用

新的option,所有的组合api函数都在此使用,只在初始化时执行一次

函数如果返回对象,对象中的属性或方法,模版中可以直接使用

ref:

定义一个数据的响应式,如果不用的话,改值改不了

const xxx = ref(number)

reactive:

定义多个数据的响应式,可以作用于对象上

二者的区别就在于,ref只能作用于类型数据,reactive可以用来处理对象

二者的用法

<template>
	<div>
		<button @click="increase">count:{{ countRef }}</button>

		<br><button @click="decrease">count:{{ countRef }}</button>

		<br><button @click="updata">message:<br>
			"姓名"{{ state.name }},<br>
			"年龄:"{{ state.age }},<br>
			"die"{{ state.dad.age }},<br>
			"die年龄:"{{ state.age }},<br>
			"死没死:"{{ state.dead }}<br>
		</button><br>
	</div>
</template>

<script>
import {
	ref,
	reactive,
	toRefs,
} from "vue"

function useCount() {
	let countRef = ref(0)
	let state = reactive({
		name: "gou",
		age: "32",
		dead: "false",
		dad: {
			name: "bigdog",
			age: "65",
			dead: "true"
		}
	})
	const updata = () => {
		state.name += "狗狗",
			state.age++,
			state.dad.name += "䒑",
			state.dad.age--
		if (state.age >= 40) {
			state.dead = "死的透透的了"

		}
	}

	const increase = () => {
		countRef.value++
		if (countRef.value > 20) {
			countRef.value = 1
		}

	}
	const decrease = () => {
		countRef.value--
		if (countRef.value <= 0) {
			countRef.value = 0
			alert("不能再减了")
		}

	}
	return {
		countRef,
		increase,
		decrease,
		state,
		updata
	}
}
export default {
	setup() {//会自动执行,组件被赋值之后会立即执行

		return {

			...useCount()
		}
	}
}
</script>

ref后()里写数字之类的类型数据

(什么是类型数据?

类型数据是指具有特定含义和结构的数据,用于表示和存储不同类型的信息。

类型数据的分类

类型数据可以根据其表示的信息类型进行分类,主要包括以下几种:

  • 数值类型‌:用于表示数值信息,如整数、浮点数等。它们可以进行数学运算,如加、减、乘、除等。
  • 字符类型‌:用于表示文本信息,如字母、数字、符号等。字符类型数据通常用于存储文本字符串。
  • 布尔类型‌:表示逻辑值,只有两种状态:真(True)和假(False)。常用于条件判断。
  • 日期和时间类型‌:专门用于表示日期和时间信息,支持日期和时间的加减、比较等操作。
  • 枚举类型‌:由一组命名的常量组成,用于表示固定的几种状态或选项。

每种类型数据都有其特定的存储方式、取值范围和操作规则,这些规则定义了数据的性质和行为。类型数据的使用有助于确保数据的准确性和一致性,提高数据处理和存储的效率。)

reactive后可以写一个对象

上面的代码是把用到的代码放到了一个function函数里,放到函数里的话,需要在setup里return中使用"..."三个点解构;

也可以不放在函数里直接放到setup中

<template>
	<p>
		<button @click="increase">count:{{ countRef }}</button>
		<br><button @click="decrease">count:{{ countRef }}</button>

		<br><button @click="updata">message:<br>
			"姓名"{{ state.name }},<br>
			"年龄:"{{ state.age }},<br>
			"die"{{ state.dad.age }},<br>
			"die年龄:"{{ state.age }},<br>
			"死没死:"{{ state.dead }}<br>
		</button><br>
		<!-- <input type="text" ref="inputRef"> -->
	</p>
</template>

<script>
import {
	ref,
	reactive,
	toRefs,
	onBeforeMount,
	onMounted,
	onBeforeUpdate,
	onUpdated,
	onBeforeUnmount,
	onUnmounted
} from "vue"

// function useCount() {
// 	let countRef = ref(0)
// 	let state = reactive({
// 		name: "gou",
// 		age: "32",
// 		dead: "false",
// 		dad: {
// 			name: "bigdog",
// 			age: "65",
// 			dead: "true"
// 		}
// 	})
// 	const updata = () => {
// 		state.name += "狗狗",
// 			state.age++,
// 			state.dad.name += "䒑",
// 			state.dad.age--
// 		if (state.age >= 40) {
// 			state.dead = "死的透透的了"

// 		}
// 	}

// 	const increase = () => {
// 		countRef.value++
// 		if (countRef.value > 20) {
// 			countRef.value = 1
// 		}

// 	}
// 	const decrease = () => {
// 		countRef.value--
// 		if (countRef.value <= 0) {
// 			countRef.value = 0
// 			alert("不能再减了")
// 		}

// 	}
// 	return {
// 		countRef,
// 		increase,
// 		decrease,
// 		state,
// 		updata
// 	}
// }
export default {
	setup() {//会自动执行,组件被赋值之后会立即执行
		let countRef = ref(0)
	let state = reactive({
		name: "gou",
		age: "32",
		dead: "false",
		dad: {
			name: "bigdog",
			age: "65",
			dead: "true"
		}
	})
	const updata = () => {
		state.name += "狗狗",
			state.age++,
			state.dad.name += "䒑",
			state.dad.age--
		if (state.age >= 40) {
			state.dead = "死的透透的了"

		}
	}

	const increase = () => {
		countRef.value++
		if (countRef.value > 20) {
			countRef.value = 1
		}

	}
	const decrease = () => {
		countRef.value--
		if (countRef.value <= 0) {
			countRef.value = 0
			alert("不能再减了")
		}

	}
	return {
		countRef,
		increase,
		decrease,
		state,
		updata
	}

		// const inputRef = ref<HTMLElement|null> (null);
		// console.log(inputRef);
		// onMounted(() => {
		// 	inputRef.value && inputRef.value.focus()
		// })
		// return {
		// 	inputRef,
		// 	...useCount()
		// }
	}
}
</script>

效果

重要零碎知识点补充

比较二者的响应式

vue2是直接可以拿到响应式,

vue3需要通过proxy代理拿到响应式,因此,vue3是没有this的使用的,或者说,this的使用与vue2不同

vue2 的this指的大多都直接是vue实例对象,vue3的this指的是代理函数。setup中没有this

且,vue2的代码分布是很乱的,vue3代码分布是很集中的

composition组合式聚合式api(同一功能代码集合在一起)

跟其对应的是opation(配置式api)布置是很乱的

左3右2

setup返回的内容会直接挂载到组件上

不管是属性还是方法

vue3多了几个新的钩子函数

import {
	ref,
	reactive,
	toRefs,
	onBeforeMount,
	onMounted,
	onBeforeUpdate,
	onUpdated,
	onBeforeUnmount,
	onUnmounted
} from "vue"

以上

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值