Reactjs 当observable.map值更改时,Mobx react不会更新组件

Reactjs 当observable.map值更改时,Mobx react不会更新组件,reactjs,mobx,mobx-react,Reactjs,Mobx,Mobx React,在我的店里 @observable dots = observable.map({ '0x001': extendObservable({ x: 2000, y: 2000 }), '0x002': extendObservable({ x: 5000, y: 5000 }), '0x003': extendObservable({ x: 10000, y: 10000 }), }); @action updateDot(id, properties) { const dot

在我的店里

@observable dots = observable.map({
  '0x001': extendObservable({ x: 2000, y: 2000 }),
  '0x002': extendObservable({ x: 5000, y: 5000 }),
  '0x003': extendObservable({ x: 10000, y: 10000 }),
});

@action updateDot(id, properties) {
  const dot = this.dots.get(id);
  this.dots.set(id, extendObservable(Object.assign(dot, properties)));
}
当我更新点值时

store.updateDot('0x002', {
  x: 200,
  y: 300,
});
我的部件不起反应

@inject('store') @observer
export class IndexComponent extends Component {

  render() {
    const { store } = this.props;
    const { dots } = store;

    return <Map dots={dots} />
  }

}
@inject('store')@observer
导出类IndexComponent扩展组件{
render(){
const{store}=this.props;
const{dots}=存储;
返回
}
}
还有地图

@observer
class Map extends Component {
  render() {
    const { dots } = this.props;
    // NOT CALLED WHEN UPDATE DOTS
    return <Matrix dots={dots} />
  }
}
@observer
类映射扩展组件{
render(){
const{dots}=this.props;
//更新点时不调用
返回
}
}
和矩阵

@observer
class Matrix extends Component {
  render() {
    const { dots, ...rest } = this.props;
    // NOT CALLED WHEN UPDATE DOTS
    return <div ...rest ></div>
  }
}
@observer
类矩阵扩展组件{
render(){
const{dots,…rest}=this.props;
//更新点时不调用
返回
}
}

最好设置一个小提琴,这样我们就可以真正验证解决方案,但我认为

@observable dots = observable.map({
  '0x001': { x: 2000, y: 2000 },
  '0x002': { x: 5000, y: 5000 },
  '0x003': { x: 10000, y: 10000 },
});

@action updateDot(id, properties) {
  const dot = this.dots.get(id);
  Object.assign(dot, properties)
}

这应该足够了(没有测试,没有保证)。默认情况下,如果子对象是非复杂对象,则可观察对象也会使其子对象可见。请注意,updateDot中的object.assign仅适用于预定义的属性(本例中为x和y)。MobX尚无法跟踪不存在的属性。因此,要么确保所有可能的prpoerty都预先声明(如果需要,使用未定义的值),要么对dots使用map结构。

我认为这取决于Metrix组件。您如何在其中使用

如果您只是将可观察值作为道具传递,MobX将不会重新播放

您必须实际从中读取数据

在这种情况下,您的矩阵必须是call
dots。get(..)
然后当
dots
发生更改时,您的Metrix将重新加载


顺便说一句,如果您的
IndexComponent
Map
只传递

我需要在Map中的每次数据更改时执行一个函数。。我以
Matrix
component中的
updateData(dots..values())
的形式执行此函数更改dot属性时没有反应。。。请注意,
observer
observer
没有任何关系<代码>自动运行更近了。Observe只侦听地图的修改,而不侦听地图内容的修改。MobX最大值(与自动运行类似)仅跟踪您实际使用的内容。因此,如果您不访问
map.get(01).x
属性,它不会对其中的更改做出反应(毕竟,如果您不使用它,为什么该值会相关)。我认为在你最初的问题中缺少的是矩阵作为观察者,或者先取消约会。我建议大家仔细阅读:,这应该能清楚地说明问题。