vue3学习日志—03.reactive函数

介绍

在上次ref的使用中我们提到,vue3对象的响应式通过reactive来实现。

示例

   setup(props,context){
  let data=reactive({
    name:'张三',
    age:18,
    hobby:['抽烟','喝酒','烫头']
  })
  function changeInfo() {
    data.hobby[0]='学习'
  }
  return{
    data,
    changeInfo
  }

}
  • 在vue3中,对象的响应式原理采用了proxy实现。proxy是es6的一个新的技术,proxy(代理对象)。

vue3响应式原理解析

    const p=new Proxy(person,{
      //  读取属性时触发
      get(target,propName){
          return target[propName]
      },
      // 新增或修改属性时触发
      set(target,propName,value){
          target[propName]=value
      },
      /* 删除属性时触发 */
      deleteProperty(target,propName){
        delete target[propName]
      }
    })
 let x1= Reflect.defineProperty(person,'name',{
     get(){
       return 3
     }
   })  
 let x2= Reflect.defineProperty(person,'name',{
     get(){
       return 4
     }
   })
  • 与Object.defineProperty不同的是,prosy可以直接监听或拦截对象属性修改的操作。通过 Reflect.defineProperty()来修改源数据的

    1. Reflect.setPrototypeOf
    2. Reflect.deleteProperty
    3. Reflect.getPrototypeOf
      以上三个Reflect的操作可以直接操作对象的属性,和object操作一样。

    结尾

    在vue3中更多的推荐使用reactive来定义数据。

上一篇:简版mvvm框架实现


下一篇:使用JS如何实现双向绑定(1)