前面介绍了Vue3.0中的一些基本属性,但Vue3.0的优势并不是只有这些,接下来一起看看Vue3.0中的其他属性吧!
目录
1.shallowReactive 与 shallowRef
一、计算属性与监视属性
在Vue2.x中,有计算属性和监视属性,在Vue3.0中,也拥有这两个属性,其用法和Vue2.x中的差不多,但是因为在Vue3.0中,使用的是composition API,所以同一个属性可以写多次。
1.computed函数
import {computed} from 'vue'
setup(){
...
//计算属性——简写
let fullName = computed(()=>{
return person.firstName + '-' + person.lastName
})
//计算属性——完整
let fullName = computed({
get(){
return person.firstName + '-' + person.lastName
},
set(value){
const nameArr = value.split('-')
person.firstName = nameArr[0]
person.lastName = nameArr[1]
}
})
}
2.watch函数
watch函数的注意点:
监视reactive定义的响应式数据时:oldValue无法正确获取、强制开启了深度监视(deep配置失效)。
监视reactive定义的响应式数据中某个属性时:deep配置有效。
//情况一:监视ref定义的响应式数据
watch(sum,(newValue,oldValue)=>{
console.log('sum变化了',newValue,oldValue)
},{immediate:true})
//情况二:监视多个ref定义的响应式数据
watch([sum,msg],(newValue,oldValue)=>{
console.log('sum或msg变化了',newValue,oldValue)
})
/* 情况三:监视reactive定义的响应式数据
若watch监视的是reactive定义的响应式数据,则无法正确获得oldValue!!
若watch监视的是reactive定义的响应式数据,则强制开启了深度监视
*/
watch(person,(newValue,oldValue)=>{
console.log('person变化了',newValue,oldValue)
},{immediate:true,deep:false}) //此处的deep配置不再奏效
//情况四:监视reactive定义的响应式数据中的某个属性
watch(()=>person.job,(newValue,oldValue)=>{
console.log('person的job变化了',newValue,oldValue)
},{immediate:true,deep:true})
//情况五:监视reactive定义的响应式数据中的某些属性
watch([()=>person.job,()=>person.name],(newValue,oldValue)=>{
console.log('person的job变化了',newValue,oldValue)
},{immediate:true,deep:true})
//特殊情况
watch(()=>person.job,(newValue,oldValue)=>{
console.log('person的job变化了',newValue,oldValue)
},{deep:true}) //此处由于监视的是reactive素定义的对象中的某个属性,所以deep配置有效
3.watchEffect函数
-
watch的套路是:既要指明监视的属性,也要指明监视的回调。
-
watchEffect的套路是:不用指明监视哪个属性,监视的回调中用到哪个属性,那就监视哪个属性。
-
watchEffect有点像computed:
-
但computed注重的计算出来的值(回调函数的返回值),所以必须要写返回值。
-
-
而watchEffect更注重的是过程(回调函数的函数体),所以不用写返回值。
//watchEffect所指定的回调中用到的数据只要发生变化,则直接重新执行回调。 watchEffect(()=>{ const x1 = sum.value const x2 = person.age console.log('watchEffect配置的回调执行了') })
二、hook函数
定义:本质是一个函数,把setup函数中使用的Composition API进行了封装
优势:类似于Vue2.x中的mixin,能够复用代码,让setup中的逻辑更清楚易懂。
使用步骤:
1.在src目录下建立一个hooks文件夹。
2.新建要用的方法的js文件,一般情况下使用use开头。
三、toRef&toRefs
作用:创建一个 ref 对象,其value值指向另一个对象中的某个属性。
语法:const name = toRef(person,'name')
应用: 要将响应式对象中的某个属性单独提供给外部使用时。
扩展:toRefs
与toRef
功能一致,但可以批量创建多个 ref 对象,语法:toRefs(person)
四、
其它 Composition API
1.shallowReactive 与 shallowRef
shallowReactive:只处理对象最外层属性的响应式(浅响应式)。
shallowRef:只处理基本数据类型的响应式, 不进行对象的响应式处理
使用场景:
1.如果有一个对象数据,结构比较深, 但变化时只是外层属性变化 ===> shallowReactive。
2.如果有一个对象数据,后续功能不会修改该对象中的属性,而是生新的对象来替换 ===> shallowRef。
2.readonly 与 shallowReadonly
readonly: 让一个响应式数据变为只读的(深只读)。
shallowReadonly:让一个响应式数据变为只读的(浅只读)。
使用场景:不希望数据发生改变,只可读
3.toRaw 与 markRaw
- toRaw:将一个由
reactive
生成的响应式对象转为普通对象。- markRaw:标记一个对象,使其永远不会再成为响应式对象。
使用场景:
1.toRaw:用于读取响应式对象对应的普通对象,对这个普通对象的所有操作,不会引起页面更新。
2.markRaw:
(1)有些值不应被设置为响应式的,例如复杂的第三方类库等。
(2)当渲染具有不可变数据源的大列表时,跳过响应式转换可以提高性能。
Vue3.0中的主要内容就是这些啦,在Vue2.x的基础上进一步的优化升级,帮助开发人员提高效率,到这里Vue全家桶的内容也差不多了,更多的使用方法需要在项目中体会~