reactive 对比ref

本文介绍了Reactive和Ref在Vue.js中的实现原理,主要通过Proxy的代理机制实现响应式,与使用Object.defineProperty的Ref进行对比,讨论了两者在定义对象/数组数据、原理以及使用上的区别。
摘要由CSDN通过智能技术生成
  • reactive 实现原理:
    • 通过Proxy(代理):拦截对象中任意属性的变化,包括属性值的读写,属性的添加,属性的删除等
    • 通过reflect(反射):对被代理对象的属性进行操作
    let person = {name:'jerry',age:15}
    let p = new Proxy(person,{
    //拦截设置属性或添加新属性
    set(target,prop,value){
       Reflect.set(target,prop,value)
    },
    //拦截读取属性
    get(target,prop){
       	console.info(`有人读取了p身上的${prop}属性`)
          console.dir(target)
          return Reflect.set(target,prop)
                   },
    //拦截删除属性
    deleteProperty(target,propsName){
       return Reflect.deleteProperty(target,propsName)
       }
    

reactive 对比ref

  • 从定义数据角度对比:
    - ref用来定义:基本数据类型
    - reactive用来定义:对象(或数组)类型数据
    - 备注:ref也可以用来定义对象(或数组)的类型数据,它内部会自动通过reactive转为代理对象
  • 从原理角度对比:
    - ref通过Object.defineProperty()的get与set来实现响应式(数据劫持)
    - reactive 通过使用Proxy来实现响应式(数据劫持),并通过Reflect操作源对象内部的数据
  • 从使用角度对比:
    - ref 定义的数据:操作数据需要.value,读取数据时模板中直接读取不需要.value
    - reactive 定义的数据:操作数据与读取数据,均不需要.value
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值