javascript - Mobx 的 observable 失去了子对象的相等性
问题描述
当我从包含实际上是相同对象的字段的普通对象创建一个可观察对象时,此属性不再是相等对象。所以如果我改变一个人的财产,第二个保持不变。
有没有合适的方法来处理这个?
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);
解决方案
当您调用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
推荐阅读
- mysql - MYSQL where 子句,其中一个时间戳字段小于另一个减去 n 天
- mongodb - MongoDB 动态评估字段名称
- java - 如何在不同库中的两个 jar 之间进行选择?
- java - 如何在 DTO 中返回枚举?
- python - Apache Beam 流式传输管道中的侧输入产生错误“NoneType 没有属性 max_timestamp”
- java - 是否可以在 HTTP 标头中动态更改标头数据
- java - 安装失败缺少的共享库
- javascript - js中每秒刷新数据(异步函数)
- python - 在 Django 中,charfield 避免字符重复
- python - 使用 pycharm 文件从 github 克隆