mobx-state-tree - 具有单独 API 调用和单独存储的嵌套模型(使用自定义引用)
问题描述
我想知道对属于同一模型的数据进行两次单独提取的最佳做法是什么。一个用于获取所有用户数据,另一个用于请求其特征并将其添加到每个用户。
我想我可以在用户中创建一个引用来填充数据,但我不确定如何创建自定义引用,因为它应该是一个数组。
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
},
}),
)
另外,这是一个好的做法还是有其他更好的方法来获得这个结果?谢谢!
解决方案
在定义模型方面,您可以尝试在模型中切换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;
}
推荐阅读
- azure - 为每个环境创建 Azure 仪表板
- google-cloud-platform - 如何检查计算引擎 vm 是否以最大核心/持续涡轮频率运行?
- javascript - 通过 docker compose 将 envs 传递给 db
- ssh - 如何在不访问主机的情况下 ssh 到 KVM 来宾 VM?
- javascript - 使用 jquery 将行跨度添加到每行的第一个 td
- python - GEOJSON 到要素(在 ArcGIS 中)缺少属性
- sql - 在 Snowflake sql 中计算两个日期之间的 20 个工作日
- ruby-on-rails-3 - Resque:Module 的未定义方法 `constantize' 你的意思是?常数
- service - 使用 h2 进行 Spring 启动测试
- c# - C# 保存记录未重定向到正确的 MS Access 数据库