首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当observable.map值更改时,Mobx-react不更新组件。

当observable.map值更改时,Mobx-react不更新组件。
EN

Stack Overflow用户
提问于 2017-06-29 03:55:36
回答 2查看 3.5K关注 0票数 2

在我的店里..。

代码语言:javascript
复制
@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)));
}

当我更新点值时..。

代码语言:javascript
复制
store.updateDot('0x002', {
  x: 200,
  y: 300,
});

我的组件没有反应..。

代码语言:javascript
复制
@inject('store') @observer
export class IndexComponent extends Component {

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

    return <Map dots={dots} />
  }

}

和地图..。

代码语言:javascript
复制
@observer
class Map extends Component {
  render() {
    const { dots } = this.props;
    // NOT CALLED WHEN UPDATE DOTS
    return <Matrix dots={dots} />
  }
}

还有矩阵..。

代码语言:javascript
复制
@observer
class Matrix extends Component {
  render() {
    const { dots, ...rest } = this.props;
    // NOT CALLED WHEN UPDATE DOTS
    return <div ...rest ></div>
  }
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-06-29 06:53:04

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

代码语言:javascript
复制
@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)
}

这应该就足够了(没有测试,就没有保证)。默认情况下,如果他们是非复杂物体,他们的孩子也可以被观察到。注意,object.assign在updateDot中只适用于预定义的属性(在本例中为x和y)。MobX还无法跟踪不存在的属性。因此,要么确保所有可能的参数都预先声明(如果需要的话带有未定义的值),要么对点使用映射结构。

票数 0
EN

Stack Overflow用户

发布于 2017-06-29 11:09:34

我想这取决于你的Metrix成分。你是如何在其中使用dots的?

如果您只是将可观察到的值作为道具传递,MobX将不会重发。

实际上,您必须从中读取数据。

在这种情况下,您的矩阵必须调用dots.get(....),然后您的Metrix将在dots被更改时重新生成。

顺便说一句,如果您的IndexComponentMap只传递给dots,它就不会重发。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44816098

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档