Vue3.0入门(下)

前面介绍了Vue3.0中的一些基本属性,但Vue3.0的优势并不是只有这些,接下来一起看看Vue3.0中的其他属性吧!

目录

一、计算属性与监视属性

1.computed函数

2.watch函数

3.watchEffect函数

二、hook函数

三、toRef&toRefs

四、其它 Composition API

1.shallowReactive 与 shallowRef

2.readonly 与 shallowReadonly

3.toRaw 与 markRaw


一、计算属性与监视属性

在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')

        应用: 要将响应式对象中的某个属性单独提供给外部使用时。

        扩展:toRefstoRef功能一致,但可以批量创建多个 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全家桶的内容也差不多了,更多的使用方法需要在项目中体会~

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值