慕神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
添加回答
舉報
0/150
提交
取消