亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

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 關注
  • 111 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號