如何解决Mobx的可观察性失去子对象相等性
当我从包含对象的可观察对象创建一个实际上是相同对象的字段时,此属性不再是相等的对象。因此,如果我更改一个人的财产,第二个保持原状。
import { observable } from "mobx";
const status = { id: "some-obj" };
const obj = {
status,status2: status
};
const observableObj = observable(obj);
const isEqual = observableObj.status2 === observableObj.status;
document.body.innerHTML = `Is equal = ${isEqual}`;
console.log(observableObj);
https://codesandbox.io/s/mobx-equality-demo-5eowk
解决方法
在常规对象上调用observable
时,它不会对其进行突变,但是会创建新的可观察对象。 MobX递归地对每个内部对象或值执行此操作,因此这就是observableObj.status2
和observableObj.status
不相等的原因。它们是从相同的“蓝图”对象创建的,但是如果可以的话,它们都是独立的副本。
原始status
仍然是常规对象,并且status2
成为observableObj
内部的可观察对象。希望有道理。
您可以做的就是让status
自己可观察,然后再将其传递到obj
内,就像这样:
const status = observable({ id: "some-obj" });
const obj = {
status,status2: status
};
const observableObj = observable(obj);
observableObj.status2 === observableObj.status // => true
那样,Mobx不会对其进行任何操作,因为它已经是observable
。
Codesandbox:https://codesandbox.io/s/httpsstackoverflowcomquestions64032286-rxj5m?file=/index.js
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。