关于使用immer库得到的对象的问题?
为什么使用immer库包装出来得到的对象 copy 和 myStructure 比较copy === myStructure 会是true,地址为什么是相同的?原理是什么?求大神指点?
const {produce} = require('immer');
const myStructure = {
a: [1, 2, 3],
b: 0
};
const myStructure2 = {
a: [1, 2, 3],
b: 0
};
const copy = produce( myStructure , (draft)=>{
} );
console.log(copy === myStructure); // true
console.log(myStructure === myStructure2); //false
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
第二个为啥是 false 不用解释吧?最基本的引用类型比较问题。
第一个为啥是 true,因为你的
produce
里压根啥属性也没改啊!draft
没任何变化,produce()
就直接返回myStructure
本身、而不是生成一个新的 immutable 对象返回了,自己当然等于自己。如果你这么写,再看看结果?
immer.js 原理问题网上随便找篇源码精读的文章吧,都快被写烂了。本质就是 Proxy + Object.defineProperty 拦截修改。