维护MobX对象与数据库同步

问题描述 投票:0回答:1

我正在使用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内部?

javascript real-time mobx
1个回答
1
投票

你可以尝试使用 mobx原子基本上,它是一种创建你自己的数据结构的方法。

它有两个回调,你可以使用。onBecomeObservedonBecomeUnobserved. 当有东西开始和停止观察你的数据结构时,它们会通知你。

© www.soinside.com 2019 - 2024. All rights reserved.