我正在使用MobX与我的React应用,来管理我的全局状态。基本上,我正在镜像我的后端数据(关系型DB)的结构,并根据需要获取数据。
目前我的结构如下。
class Model {
@observable id
@observable propA = 0
constructor(doc) {
this.id = doc.id
this.propA = doc.propA
}
@action
update = (doc) => {
this.propA = doc.propA
}
@computed
get computedProp() {
return this.propA * 2
}
}
class Store {
records = observable.map()
@action
fetchOne = async (id) => {
const doc = await fetch(url + id)
const model = new Model(doc)
this.records.set(id, model)
}
getOne = copmutedFn((id) => {
if (!this.records.has(id)) {
this.fetchOne(id)
}
return this.records.get(id)
})
}
The computedFn
函数来自于mobx-utils,基本上是一个接受参数的计算。
我把所有的记录都保存在商店里 records
属性来维护应用的不同部分之间的引用。
我现在要做的是让这些记录与我的数据库保持同步,我打算用固定间隔的轮询方法来实现。
然而我并不想重新获取我存储的每一条记录,有些记录可能已经不被观察了,我只想获取当前app上需要的记录。
有没有一种方法可以让我去研究,比如说,我可以用 records
并检查哪些id被观察到,哪些没有?
是否有其他结构可以允许这样更精细的控制,而不需要黑进MobX内部?
你可以尝试使用 mobx原子基本上,它是一种创建你自己的数据结构的方法。
它有两个回调,你可以使用。onBecomeObserved
和 onBecomeUnobserved
. 当有东西开始和停止观察你的数据结构时,它们会通知你。