Reactjs 为什么toJS()在应用于可观察对象时返回空对象莫布

Reactjs 为什么toJS()在应用于可观察对象时返回空对象莫布,reactjs,mobx,mobx-react,jsobject,Reactjs,Mobx,Mobx React,Jsobject,当我对一个可观察对象执行toJS()操作时,得到的是一个空对象。在使用Object.assign()进行API调用之后,我将值分配给observeObject。现在,我在不同存储的计算的方法中使用这个observateObject,如下代码所示 class Store { @observable observableObject = {}; Fetch(){ ..... APIcall() .then((response) =&g

当我对一个可观察对象执行toJS()操作时,得到的是一个空对象。在使用Object.assign()进行API调用之后,我将值分配给
observeObject
。现在,我在不同存储的计算的方法中使用这个
observateObject
,如下代码所示

class Store {
    @observable observableObject = {};

    Fetch(){
        .....
        APIcall()
        .then((response) => {
            Object.assign(this.observableObject, response.data);
        }).catch(...)
    }
    .....
}

class Store2 {

    @computed get computedValue(){

        // return an non empty {Symbol(mobx administration): ObservableObjectAdministration$$1} object
        console.log(this.rootStore.store1.observableObject);

        // returns True
        console.log(isObservable(this.rootStore.store1.observableObject));

        // return an empty object
        console.log(toJS(this.rootStore.store1.observableObject));

    }
}
我提到过这个,但找不到任何帮助。在下面找到
可观察对象的日志。谁能解释一下mobx中
toJS()
的意外行为吗

编辑:proxy mobx observable日志中的目标字段包含除toJS()转换生成空对象之外的所有字段。这是沙盒演示


这只是等待API响应足够长时间的问题。在CodeSandbox中,一旦API调用返回,脚本几乎立即退出,而无需等待MobX更新任何内容。如果幸运的话,它可能会很快结束,让您看到一些控制台输出,但可能不会

诀窍是等待API,然后更新存储,然后从中读取计算值:

import{observable,toJS,runInAction,computed}来自“mobx”;
从“axios”导入axios;
班级商店{
@可观测对象={};
}
常量存储=新存储();
二级仓库{
@computed get computedVar(){
返回到js(store.observeObject);
}
}
const store2=新的store2();
log(“API调用之前的对象:”,store2.computedVar);
axios
.get(“https://jsonplaceholder.typicode.com/todos/1")
。然后(响应=>{
运行不活动(()=>{
赋值(store.observeObject,response.data);
});
})
.然后(()=>{
log(“API调用后的对象:”,store2.computedVar);
})
.catch(控制台错误);

我写了一个答案,然后意识到它取决于版本(如果您不使用v4或更低版本,则与此无关)。你能分享一个完整的例子来说明这个问题吗?可能使用或类似。更新了问题,请查看一下,但是为什么目标字段仍然在代理对象中显示正确的输出?当我在沙箱中运行您的示例时,所有输出都是空的(
{}
)。如果您看到一些不同的情况,可能是API请求有时返回的速度足够快,可以及时更新存储?很难说。