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将不会重新播放
您必须实际从中读取数据
在这种情况下,您的矩阵必须是calldots。get(..)
然后当dots
发生更改时,您的Metrix将重新加载
顺便说一句,如果您的
IndexComponent
和Map
只传递点
,我需要在Map中的每次数据更改时执行一个函数。。我以Matrix
component中的updateData(dots..values())
的形式执行此函数更改dot属性时没有反应。。。请注意,observer
与observer
没有任何关系<代码>自动运行更近了。Observe只侦听地图的修改,而不侦听地图内容的修改。MobX最大值(与自动运行类似)仅跟踪您实际使用的内容。因此,如果您不访问map.get(01).x
属性,它不会对其中的更改做出反应(毕竟,如果您不使用它,为什么该值会相关)。我认为在你最初的问题中缺少的是矩阵作为观察者,或者先取消约会。我建议大家仔细阅读:,这应该能清楚地说明问题。