Vue3-04-reactive() 响应式失效的三种情况

1.替换对象后导致失效

简单理解 : 变量指向的对象换了,对原来的对象,当然没有了响应式的效果了。
    // 声明 变量
    let obj1 = reactive({name:"第一个对象"})
    // 改变 变量的指向
    obj1 = reactive({name:"第二个对象的属性"})
    console.log('obj1.name : ',obj1.name)

在这里插入图片描述

2.解构之后导致失效

将 reactive() 的对象解构成本地变量之后,
直接操作本地变量,是不会影响 原对象的属性值的。
这个也好理解,可以把解构看作是 定义了一个新的普通变量,
修改普通变量的值,当然是不会对响应式对象造成影响了,它俩根本就不是一个对象。
    // 声明 变量
    const obj2 = reactive({id:1002,name:"第一个对象"})
    // 解构出来 并重新赋值
    let {name,id} = obj2;
    id = 2002;
    name = '本地变量name的值'
    // obj2 不会改变,但是 name 和 id 的值会发生变化
    console.log('obj2 : ',obj2)
    console.log('name : ',name)
    console.log('id : ',id)

在这里插入图片描述

3.属性直接作为函数参数导致失效

将 reactice() 对象的属性,单独作为函数参数的时候,
若函数体内对此属性进行了修改,也不会对原属性产生影响。
可以理解为 是一种【值传递】的方式,而非 【引用传递】。

补充 : 
    但是,如果函数的参数是直接把整个的对象传进去的,则该对象让然保持响应式的状态!
    此处可以理解为【引用传递】。

属性作为参数案例

    // 声明 变量
    const obj2 = reactive({id:1002,name:"第一个对象"})

    // 定义一个函数
    const sayHello = (name:string):void => {
        console.log('hello-1 : '+name)
        // 对参数进行修改
        name = '修改后的名称'
        console.log('hello-2 : ',name)
    } 
    // 调用函数 
    sayHello(obj2.name)

  
    // obj2 不会改变,属性值还是原来的值
    console.log('obj2 : ',obj2)

在这里插入图片描述

整个对象作为参数


    // 声明 变量
    const obj2 = reactive({id:1002,name:"第一个对象"})

    // 定义一个函数
    const sayObj = (abc:any) =>{
        abc.name = 'aaa'
        console.log('对象属性修改完成')
    }
    
    sayObj(obj2)
   

    // obj2 不会改变,属性值还是原来的值
    console.log('obj2 : ',obj2)

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值