在 Mobx 中重新水化存储引用

Rehydrate store references in Mobx

在应用程序初始化期间补充商店的最佳方式是什么,特别是商店之间的引用?

例如,假设我有 2 个 api 调用:

/todos -> return array of todos [{id: 1, person_id: 2}]

/persons -> return array of Persons [{id: 2, name: 'John'}, {id: 3, name: 'Sam'}]

Todo 对象看起来像这样

class Todo { ... @observable person; ... }

有些 Todo 会引用一个人,但不是所有的,也不是所有的人都会被引用,所以它不像仅仅取消人 api 调用那么简单只是通过 Todos api 调用返回 Person 引用。

但是,我们无法确定 Persons api 调用是否会首先返回,因此我们不能假设在 todos 响应到达时 link up Todo / Person 引用(想 运行 并行调用)...

是否只是客户端代码中的额外逻辑问题,以确保我们在数据进入时设置所有引用?或者是否有任何人在这些经验中发现了一些更好的做法。

编辑

我想得越多,我认为最可预测的逻辑就是总是获取或创建一个引用对象。

所以在上面的例子中,如果 Todos 响应最先出现,我们会寻找 id 为 2 的 Person 对象,如果它存在 great,如果不存在,则创建它并引用该对象。然后当 person 响应进来时它会做同样的事情...寻找 id 为 2 的 Person,如果它存在,用新数据更新它,如果不存在,创建它。

有人有更好的主意吗?

最简单的方法确实是按顺序加载对象并找到它们。之后并行加载它们,如果您引用它们,则查找或创建占位符。这是一个很常见的模式。