vue3 修改响应式数据的同时 页面会不会修改 普通变量

313 阅读1分钟
  • 今天在讨论群聊中 有一个小伙伴提出了一个关于vue3 响应式数据修改中一个有趣的问题;
  • 各位小伙伴看完如果觉得是bug 可以给自己创建一个pr的好机会哦;
  • 接下来就让我们来探索一下吧;

b6b6d7f2ddf4e8c7d796541a7be34c5.png

  1. 该问题指出 当前变量 A 是通过ref 绑定的响应式 数据 而 变量B不是 但是 修改 变量 A++ 的同时 也修改 了 B 变量;
  2. A变量修改完成后 页面更新了 ,但是为什么 页面中引用到的 B 也同时修改了

我的解答:

  • 我认为 是在 A 变量 执行修改 时 也修改了 B 变量 , A 变量修改触发 了 SET 方法 , 调用了 Dep类 的notify方法触发依赖的更新;
  • vue的更新是 异步更新 所以在 触发更新依赖 Watcher 时 Diff 比对 新Vnode 和 老的OldVnode 时 进行了 A 变量 的数据修改 和 对B变量的数据修改 ;
  • 所以响应式变量A 的渲染同时 也渲染了 普通变量B的数据;

问:

  • 各位小伙伴觉得vue3 的这个问题 是不是 bug 呢 ? 欢迎评论区讨论;
  • 如果小伙伴觉得我的解答 错误 , 欢迎纠正;