具有单独的API调用和单独的存储(使用自定义引用)的嵌套模型

时间:2019-08-28 20:48:35

标签: mobx-state-tree

我想知道对属于同一模型的数据进行两次单独提取的最佳实践是什么。一个用于获取所有用户数据,另一个用于请求其特征并将其添加到每个用户。

我想我可以在User中创建一个引用来填充数据,但是我不确定如何创建自定义引用,因为它应该是一个数组。

export const User = types
  .model('User', {
    id: types.identifierNumber,
    ...
    traits: types.maybeNull(TraitsbyUserReference),
  })

const TraitsbyUserReference = types.maybe(
  types.reference(Trait, {
    get(identifier: string, parent):  {
      return (parent as Instance<typeof TraitsStore>).getAllTraits()
    },
    set(value) {
      return value; // this is what doesnt work out because i'm fetching a whole array
    },
  }),
)

此外,这是一种好的做法还是还有其他更好的方法来获得此结果? 谢谢!

1 个答案:

答案 0 :(得分:0)

在定义模型方面,您可以尝试从maybeNull切换到模型中具有默认值的可选数组-

...
traits: types.optional(types.array(Trait), []),
...

因此,将始终使用空的特征集实例化模型。

TraitsbyUserReference而言,我没有遵循动态商店查找所需的抽象概念。您可以创建一个动作(例如User.actions(self => ...))以将特征作为单独的api查找-

getUserTraits(){
   /* this will vary based on your implementation of TraitsStore and how it is injected */
    const traits = self.TraitsStore.getAllTraits(self.id); 
    self.traits = traits;
}