Reactjs 为什么toJS()在应用于可观察对象时返回空对象莫布
当我对一个可观察对象执行toJS()操作时,得到的是一个空对象。在使用Object.assign()进行API调用之后,我将值分配给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
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请求有时返回的速度足够快,可以及时更新存储?很难说。