您好,欢迎来到三六零分类信息网!老站,搜索引擎当天收录,欢迎发信息

使用Proxy实现双向绑定的方法介绍(代码)

2024/11/1 11:44:26发布26次查看
本篇文章给大家带来的内容是关于使用proxy实现双向绑定的方法介绍(代码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。
前言:vue3.0要用proxy来实现双向绑定,因此先来尝试一下实现方法。
1 object.defineproperty 实现
原来vue2的实现使用object.defineproperty,监听set,但对于数组直接下标给数组设置值监听不了。
function observe(data) {  if (!data || typeof data !== 'object') {      return;  }  // 取出所有属性遍历  object.keys(data).foreach(function(key) {      definereactive(data, key, data[key]);  });};function definereactive(data, key, val) {  observe(val); // 监听子属性  object.defineproperty(data, key, {      enumerable: true, // 可枚举      configurable: false, // 不能再重写defineproperty      get: function() {          return val;      },      set: function(newval) {          console.log('-------通知订阅者--------')          val = newval;      }  });}
2 使用proxy实现
使用proxy实现原理主要是new一个proxy对象,代理你的data值,需要注意的一点是,对于数组的方法操作来说,会产生两次赋值操作,一次是添加值,一次是改变他的length值,而对于object.defineproperty监听不到的数组下标给数组设置值,proxy是可以监听到的。
function observe(data) {    if (!data || typeof data !== 'object') {        return;    }    // 取出所有属性遍历    object.keys(data).foreach(function(_k) {        // proxy不允许绑定在非对象上        if (data[_k] && typeof data[_k] === 'object') {            data[_k] = definereactive(data[_k]);        }    });}function definereactive(data) {  return new proxy(data, {    set(target, key, value, proxy) {        // 进行数组操作时,会进行两次set 一次数据改变,一次length改变,两次改变data的值是不变,因此不应该多分发一次消息      if (        object.prototype.tostring.call(data) === [object array] &&        key === length      ) {        reflect.set(target, key, value, proxy);        return true;      }      observe(data);      reflect.set(target, key, value, proxy);      console.log('-------通知订阅者--------')      return true;    }  });
本篇文章到这里就已经全部结束了,更多其他精彩内容可以关注的javascript教程视频栏目!
以上就是使用proxy实现双向绑定的方法介绍(代码)的详细内容。
该用户其它信息

VIP推荐

免费发布信息,免费发布B2B信息网站平台 - 三六零分类信息网 沪ICP备09012988号-2
企业名录 Product