为了账号安全,请及时绑定邮箱和手机立即绑定

Mobx 的 observable 失去了子对象的平等性

Mobx 的 observable 失去了子对象的平等性

慕神8447489 2023-03-24 13:56:17
当我从包含实际上是相同对象的字段的普通对象创建可观察对象时,此属性不再是相等的对象。所以如果我改变一个人的财产,第二个保持不变。有没有正确的方法来处理这个问题?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
查看完整描述

1 回答

?
桃花长相依

TA贡献1860条经验 获得超8个赞

当您调用observable常规对象时,它不会改变它,而是创建新的可观察对象。MobX 在每个内部对象或值上递归地执行它,所以这就是为什么observableObj.status2和observableObj.status不相等的原因。它们是从同一个“蓝图”对象创建的,但每个都是独立的副本,如果我可以这样说的话。


原来status还是regular object,status2里面变成了observable object 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.


代码沙盒:https://codesandbox.io/s/httpsstackoverflowcomquestions64032286-rxj5m ?file=/index.js


查看完整回答
反对 回复 2023-03-24
  • 1 回答
  • 0 关注
  • 90 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信