Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/429.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript mobx extendObservable不';I don’我没有按预期工作_Javascript_Reactjs_Mobx_Mobx React - Fatal编程技术网

Javascript mobx extendObservable不';I don’我没有按预期工作

Javascript mobx extendObservable不';I don’我没有按预期工作,javascript,reactjs,mobx,mobx-react,Javascript,Reactjs,Mobx,Mobx React,我试图使用extendObservable在可观察状态上添加更多属性,但它不起作用。下面是我的代码 var store = mobx.observable({ property: {} }); mobx.autorun(function () { console.log("render:"+store.property.a); }); store.property = {a:1}; extendObservable(store.property, {a:2}); store.pro

我试图使用
extendObservable
在可观察状态上添加更多属性,但它不起作用。下面是我的代码

var store = mobx.observable({
  property: {}
});


mobx.autorun(function () {
  console.log("render:"+store.property.a);
});

store.property = {a:1};
extendObservable(store.property, {a:2});
store.property.a=3;
输出为:

render:undefined
render:1
我用
属性
对象初始化了一个商店。我想在
属性下添加
a
作为可观察状态,但在使用
extendObservable
方法后,我没有执行
autorun
。我期望值3被打印出来,但它没有打印出来。我的代码怎么了?这是使用可扩展服务方法的正确方法吗?

请仔细阅读本页。使用
extendObservable
添加的动态属性的用法有一些规律。您正在“观察”的对象(双关语)记录在该页面的不正确:使用尚未存在的可观察对象属性部分中。正确的方法也将在下一节中提到

基本上,跟踪函数必须使用observable的
get
方法,以确保在状态发生变化时再次调用它。固定代码是-

mobx.autorun(function () {
  console.log("render:"+store.property.get("a"));
});

extendObservable(store.property, {a:2});
store.property.set("a", 3);
因此,您需要将
get
/
set
extendedobservable
扩展对象一起使用。

请仔细阅读本页。使用
extendObservable
添加的动态属性的用法有一些规律。您正在“观察”的对象(双关语)记录在该页面的不正确:使用尚未存在的可观察对象属性部分中。正确的方法也将在下一节中提到

基本上,跟踪函数必须使用observable的
get
方法,以确保在状态发生变化时再次调用它。固定代码是-

mobx.autorun(function () {
  console.log("render:"+store.property.get("a"));
});

extendObservable(store.property, {a:2});
store.property.set("a", 3);

因此,您需要将
get
/
set
extendedobservable
扩展对象一起使用。

您可以在文档的一节中了解这不起作用的原因:

MobX可观察对象不检测属性指定或对属性指定作出反应 这在以前是不可观测的。所以MobX是可观测的物体 充当具有预定义键的记录。你可以用
extendObservable(目标、道具)
引入新的可观测 对象的属性。但是,对象迭代器,如..的
。。在
Object.keys()
不会自动对此做出反应。如果你需要 动态设置关键帧的对象,例如按id存储用户,创建 可观测地图

因此,不必在可观察对象上使用
extendObservable
,只需向可观察贴图添加一个新键即可

示例

var store = mobx.observable({
  property: mobx.observable.map({})
});

mobx.autorun(function () {
  console.log('render:' + store.property.get('a'));
});

store.property.set('a', 2);

setTimeout(function () {
  store.property.set('a', 3);
}, 2000);

您可以在文档的一节中阅读为什么这不起作用:

MobX可观察对象不检测属性指定或对属性指定作出反应 这在以前是不可观测的。所以MobX是可观测的物体 充当具有预定义键的记录。你可以用
extendObservable(目标、道具)
引入新的可观测 对象的属性。但是,对象迭代器,如..的
。。在
Object.keys()
不会自动对此做出反应。如果你需要 动态设置关键帧的对象,例如按id存储用户,创建 可观测地图

因此,不必在可观察对象上使用
extendObservable
,只需向可观察贴图添加一个新键即可

示例

var store = mobx.observable({
  property: mobx.observable.map({})
});

mobx.autorun(function () {
  console.log('render:' + store.property.get('a'));
});

store.property.set('a', 2);

setTimeout(function () {
  store.property.set('a', 3);
}, 2000);