- 今天在讨论群聊中 有一个小伙伴提出了一个关于vue3 响应式数据修改中一个有趣的问题;
- 各位小伙伴看完如果觉得是bug 可以给自己创建一个pr的好机会哦;
- 接下来就让我们来探索一下吧;
- 该问题指出 当前变量 A 是通过ref 绑定的响应式 数据 而 变量B不是 但是 修改 变量 A++ 的同时 也修改 了 B 变量;
- A变量修改完成后 页面更新了 ,但是为什么 页面中引用到的 B 也同时修改了;
我的解答:
- 我认为 是在 A 变量 执行修改 时 也修改了 B 变量 , A 变量修改触发 了 SET 方法 , 调用了 Dep类 的notify方法触发依赖的更新;
- vue的更新是 异步更新 所以在 触发更新依赖 Watcher 时 Diff 比对 新Vnode 和 老的OldVnode 时 进行了 A 变量 的数据修改 和 对B变量的数据修改 ;
- 所以响应式变量A 的渲染同时 也渲染了 普通变量B的数据;
问:
- 各位小伙伴觉得vue3 的这个问题 是不是 bug 呢 ? 欢迎评论区讨论;
- 如果小伙伴觉得我的解答 错误 , 欢迎纠正;