Vue3.0起步

Vue3.0

1. computed

​ 在v3中的计算属性写在setup中

​ 1> (没有考虑计算属性被修改的情况)

 imoport {computed} from 'vue'
 export default{
 	setup(){
 	 let xxx=computed(()=>{
 	 	return yyy
 	    })
 	 return {xxx}
 	}
 }

​ 2> (计算属性被修改的情况)

imoport {computed} from 'vue'
 export default{
 	setup(){
 	 let xxx=computed({
 	 	get(){return yyy}
 	 	set(value){zzz=value}
 	    })
 	 return {xxx}
 	}
 }
2. watch
import {watch} from 'vue'
export default{

	setup(){
	let sum =ref(0)
	let msg =ref('hahah')
	//vue2是不可以写两个watch,但是v3是可以写多次
	watch([sum,msg],(newValue,oldValue)=>{},{immediate:true,})
	
	//reactive定义的无法获取正确的oldvalue,v3是默认开启深度监视的,关不掉,可直接监视多层次的结构
	let obj=reactive({
		name:'李白,
		age:18',
		iob:{
			phone:'移动'
			}
		})
	watch(obj,(newValue,oldValue)=>{})
	
	//如果想要监视对象中的某个属性或某个对象?
	watch(()=>obj.name,(newValue,oldValue)=>{})
		
	//只想监视obj下的job
	watch(()=>obj.job,(newValue,oldValue)=>{},{deep:true})
	
	return{sum,msg,obj}
	}
}
3. watchEffect

​ 这是什么?特性:上来就执行一次,就像默认开启了immediate:true,

参数是一个回调,如果在回调中用了什么属性,vue就可以监测到,特点:能够分别多层的对象

import {watchEffect} from 'vue'
export default{
	setup(){
		watchEffect(()=>{})
	}
}
4. watchEffect和computed的区别

​ computed注重的是计算出来的值(回调函数的返回值),所以必须要写返回值

​ watchEffect注重的是过程(回调函数的函数体),所以不用写返回值

5. 生命周期的变化

​ vue2: beforeDestroy销毁前↓↓ destroyed销毁后↓↓

​ vue3: beforeUnmount卸载前 unmounted卸载后

其他正常使用,与setup同级。

但是vue3中都是组合式API,“也可以” 放在setup中,但是写法上有所变化

beforeCreate====>beforeCreate

created======>created

其余都加 ‘on’

import {onBeforeMount} from 'vue'
export default{
	setup(){
		onBeforeMount(){
		console.log('----onBeforeMount-----')
		}
		...
	}
}
6. 自定义hook函数

​ 定义:本质是一个函数,把setup函数中使用的compositionAPI进行了封装,和混入差不多

是为复用产生的。

​ 单独写一个js文件,对外暴露一个函数,并且要有返回值

优势:复用代码,让setup中的逻辑更简单,更易懂。

7. toRef

如果一个对象是深层次的,在模板上要写很长的路径,但是我们想要简化模板上的数据,就要在setup中简化返回的数据,最大的特点:“可以变成 响应式 ”

import {toRef} from 'vue'
export default{
	setup(){
		let person=reactive({
			name:'李星云',
			age:13,
			job:{
				salary:20
			}
			
		})
		return{
			name:toRef(person,'name'),
			salary:toRef(person.job,'salary'),
		}
	}
}
—— toRefs

toRef只能单个进行处理,你要说明对象和属性

toRefs

export {toRefs} from 'vue'
export default{
	setup(){
		let perdon=reactive({
			name:'流岚',
			age:12,
			job:{
				phone:'移动'
			}
		})
		
		return{
		//这样对象中的属性都拆出来了,但是只拆第一层
			...toRefs(person)
		}
	}
}
8. Composition API的优势

在vue2中叫Options API 的问题:

​ 它存在的问题是当我们新增一个需求的时候,需要分别在data,methds,computed里修改,这个如果写过 vue2的就知道,一旦新增功能,所有有关的方法或者数据都被拆散了,导致代码冗长,不好区分,很乱。

在vue3中Composition API 的优势:

​ 我们可以更优雅的组织代码和函数,让相关的代码更加有序的组织在一起。hook会让组合式API发挥最大的“威力”,都在复用这个hook函数

9. shallowReactive

浅层次响应式,只响应式第一层,这就是它相对于reactive的特点

10. shallowRef

传入基本数据类型,ref和shallowRef没有区别

但是如果传入的是对象类型,就不能进行响应式的了,相对于ref的特点是:只能对基本数据类型进行响应式处理

那什么时候用????

​ 如果有一个对象,结构比较深,但变化时只是外层属性变化====》shallowReactive

​ 如果有一个对象数据,后续功能不会修改该对象的属性,而是生成新的对象来替换====》shallowRef

11. readonly与shallowReadonly

​ readonly:让一个响应式数据变为只读的(深只读)

​ shallowReadonly:让一个响应式对象变为只读(浅只读)

​ 应用场景:不希望数据被修改时。

12. toRaw

可以将响应式对象变成普通的对象,只能处理reactive所缔造的响应式对象,ref的不可以,是undefined

13. MarkRow

标记一个对象,使其永远不会再成为响应式对象。

​ 应用场景:

  • 有些值不应被设置为响应式的,例如复杂的第三方类库等。
  • 当渲染具有不可编数据源的大列表时,跳过响应式转换可以提高性能。其实

其实就是当我们通过ajax请求过来的数据,具有深层次结构,并且我们不需要对其中的数据进行修改,仅用于渲染,就可以MarkRow()

在性能上有很大的提升

14. customRef

相当于自定义ref函数,并且可以加一些我们所需要的功能。

举例:当我们向输入框输入时,想要在下方的h3也显示出来,但是要延迟3秒。这个时候我们就可以使用 customRef,方法如下:

export {customRef}  from  'vue'
export default{
	setup(){
		//定义一个myref实现和ref一样的功能
		function myref(value){
			return customRef((track,trigger)=>{
				get(){
				track()            //通知Vue追踪value的变化,不然get还以为是之前的value
				return value
				},
				set(NewValue){
					value=NewValue
					trigger         //目的是通知Vue去重新解析模板
				}
			})
		}
		let name=myref("hello")
	}
}
15. provide与inject

​ 实现祖先组件和后代组件通信

父组件

import {reactive,toRefs,provide} from 'vue'
export defalut{
	setup(){
		let car = reactive({name:'凯迪拉克',price:'100万'})
		//给后代组件传递数据
		provide('car',car)
		return {...toRef(car)}
	}
}

子组件

import {inject} from 'vue'
export default{
	setup(){
		let xxx=inject('car')
		//这个xxx是个响应式的
	}
}
16.响应式数据的判断
  • isRef : 检查一个值是否为一个ref对象

  • isReactive : 检查一个对象是否是由reactive创建的响应式代理

  • isReadonly : 检查一个对象是否是由readonly创建的只读代理

  • isProxy :检查一个对象是否是由reactive或者readonly方法创建的代理

17.Fragment组件

在vue2中,组件必须有一个根标签

在vue3中,组件可以没有根标签,内部会将多个标签包含在一个Fragment虚拟元素中

好处:减少标签层级,减少内存占用

18. Teleport组件

“传送”

例如:我想要写一个弹窗,就在屏幕的正中央,如果利用的是定位,一旦有祖先元素使用了定位就会有极大的干扰,这个时候“传送”的有点就显示出来了

<template>
我是内容
	<button>点我就可以展示弹窗</button>
	<teleport to='body或者是选择器例如#qwe'>
		<div v-show='isShow' class='' 这可以是个遮罩层>
			弹窗
		</div>
	<teleport>
</template>
19.Suspense

当我们正常引入组件的时候,是等到项目加载完毕,父子组件同时展示的,

import Child from './components/...'

以上属于静态引入。

接下来我们来看一种新的引入方式,异步引入(动态引入)

import {defineAsyncComponent} from 'vue'
const Child =defineAsyncComponent(()=>import('./components/...'))
在网速慢的时候能够体现出来,先出来的先展示。
export default{

}

重点来了!!!!,这个时候优先出来,后出来的那个突然出现比较突兀,怎么解决??Suspense

<template>
	<div>我是内容</div>
	<Suspense>
		<template v-slot:default>
		应该显示的内容
		</template>
		<template v-slot:fallback>
		如果上面的不显示,这个就显示
		加载中······
		</template>
	
	</Suspense>
</template>
20.Vue3.0对部分API做出了调整
  • Vue.prototype============>app.config.globalProperties

  • 移除config.keycode

  • 移除v-on.native

  • 移除过滤器filter:推荐计算属性

21.零碎变化可参考vue3文档

https://cn.vuejs.org/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值