vue3.0 响应式代理和vue2区别

vue3中:
	通过Proxy(代理):拦截对data任意属性的任意(13种)操作,包括属性值的读写,属性的添加,属性的删除等...
	通过Reflect(反射):动态对被代理对象的相应属性进行特定的操作

vue2中响应式的缺点:
	对象直接新添加的属性或删除已有属性,界面不会自动更新,vue3中不存在
	对象直接新添加的属性或删除已有属性,界面不会自动更新,vue3中不存在

代码示例:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>玉树凌风美少年,揽镜自顾夜不眠</title>
</head>
<body>
  <script>
    const user={
      name:'jeff',
      age:20,
      wife:{
        name:'keira',
        age:30
      }
    }
    //target:目标对象即对象,property:属性名或Symbol,value:新属性,receiver:通常是proxy本身,但handler的set方法也有可能在原型链上,或以其他方式被间接地调用(因此不一定是proxy本身)
    const proxyUser=new Proxy(user,{
      get(target, property,receiver){
        console.log('get劫持')
        return Reflect.get(target,property);
      },
      set(target, property, value, receiver){
        console.log('set劫持')
        return Reflect.set(target, property, value, receiver)
      }
    })

    console.log(proxyUser.name);
    proxyUser.wife.name='赵'	//只能劫持第一层,第二层劫持需要循环遍历,参考vue2中的循环遍历原理
    console.log(proxyUser.wife.name)

  </script>
</body>
</html>
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Vue 3.0 的响应式原理与 Vue 2.x 相比有所改变,主要体现在两个方面:Proxy 替代 Object.defineProperty 和 取消了异步更新。 首先,Vue 3.0 使用了ES6 中的Proxy对象替换了 Object.defineProperty 实现响应式Proxy 对象可以代理任何类型的 JavaScript 对象,因此能够处理动态添加的属性,而 Object.defineProperty 只能劫持对象的属性访问和赋值。 其次,Vue 3.0 取消了 Vue 2.x 的异步更新机制。在 Vue 2.x 中,当数据发生改变时,Vue 会异步更新视图,将同步任务放在微任务队列中,在下一个事件循环周期中,再根据优先级执行这些任务。在 Vue 3.0 中,由于使用了 Proxy 所以对数据的改变的操作可以直接同步执行,因而取消了异步更新,这将提高应用的渲染性能。 在 Vue 3.0 中,当数据改变时,Vue 会遍历数据对象,在访问到对象属性时,通过 Proxy 拦截器劫持了它的 getter,当数据被访问时,记录用户当前的组件 target 并把组件实例添加到属性的订阅列表中,在 setter 中,把属性值重新赋值后,通知所有订阅该属性的组件更新视图。 需要注意的是,由于 Proxy 无法监听到数组的变化,因此 Vue 3.0 使用了重写数组方法的方式来实现对数组的响应式处理。具体实现也是通过在数组访问时劫持对应的方法,并且在数组改变时,通知所有依赖该数组的组件更新。 总之,Vue 3.0 的响应式原理在性能和功能上都相对于 Vue 2.x 有所提升,同时在使用中也需要注意其对数组的响应式实现方式。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值