javascript - 在构造函数中存储更新时不调用反应;
问题描述
我有两家商店,第二家商店应该根据第一家商店的更新进行更新。第一家店:
import {decorate} from 'mobx';
export class EntryStore {
constructor (parent_store) {
this.parent_store = parent_store;
this.entries = [];
console.log('----------------------');
setTimeout(() => this.entries.push({event: 0, id: 0}), 1000);
console.log('constructed;')
}
}
decorate(EntryStore, {
entries: observable,
});
第二家店:
import {decorate, reaction} from 'mobx';
export class EventStore {
constructor(parent_store) {
this.parent_store = parent_store;
this.events = new Map();
this.entry_load_disposer = reaction(
() => this.parent_store.entryStore.entries.map(e => e),
async (event_ids) => {
console.log('we are getting events');
return this.loadSomeDataPromise();
}
);
}
}
decorate(EventStore, {
events: observable,
});
为了完整起见,“parent_store”:
import {EventStore} from "./EventStore";
import {EntryStore} from "./EntryStore";
export default class RootStore {
constructor() {
this.entryStore = new EntryStore(this);
this.eventStore = new EventStore(this);
}
}
我希望反应“在加载 entryStore 后立即”运行。但是它没有,反应根本没有运行。怎么来的?我在哪里做错了?
解决方案
尝试从映射中取消引用返回数组的长度属性,如下所示:
this.entry_load_disposer = reaction(
() => this.parent_store.entryStore.entries.map(e => e).length,
(event_ids) => {
console.log('we are getting events');
return this.loadSomeDataPromise();
},
{
fireImmediately: true
}
);
我建议您也删除异步,除非它存在的原因。另请查看了解 MobX 的反应
推荐阅读
- java - UnsupportedOperationException 使用 Webflux 和 Spring Boot 和 Google Cloud Storage 上传 MultiPart 文件
- java - 使用java 8从列表中获取子类的第一个实例
- html - 图像下方的空白
- python - 如何在 Python 中更改图像的名称
- amazon-redshift - 无法为 Amazon Redshift Spectrum 创建外部架构
- r - 减少我调用依赖于 selectizeInput 框的函数的次数
- sql - 想要用第二行更新第一行值,反之亦然,但仅对于一列,其他列值应保持不变
- arduino - 用 Arduino 控制伺服系统
- firebase - Firestore 规则来确定资源是否具有具有特定值的属性
- apache-spark - __HIVE_DEFAULT_PARTITION__ 作为胶水 ETL 作业中的分区值