Vue3.0 响应式实现原理

技术 · 2023-07-20

通过Proxy (代理): 拦对象中任意属性的变化,包括: 属性值的读写、属性的添加、属性的删除等
通过Reflect (反射): 对源对象的属性进行操作
示例代码:

    const p = new Proxy(person,{
        //有人读取p的某个属性时调用 
        get(target,propName){
            console.log(`有人读取了p身上的${propName}属性`);
            return Reflect.get(target,propName)
        },
        //有人修改p的某个属性、或者给p追加某个属性时调用
        set(target,propName,value){
            console.log(`有人修改了p身上的${propName}属性,我要去更新界面了`)
            // target[propName]=value
            Reflect.set(target,propName,value)
        },
        //有人删除p的某个属性时调用 
        deleteProperty(target,propName){
            console.log(`有人删除了p身上的${propName}属性,我要去更新界面了`)
            return Reflect.deleteProperty(target,propName)
        }
    })
vue
  1. Teacher Du 2023-07-25

    没太看懂~

  2. 云晓晨 2023-07-23

    山东的老乡哎

    1. 铅笔Naruto (作者)  2023-07-23
      @云晓晨

      老乡好~哈哈😀😀

Theme Jasmine by Kent Liao