reactjs - 为 Normalizr 实体使用两个 id 键属性的最佳方法
问题描述
考虑一个模型公司,其 id 和 slug 字段都是唯一的。- 公司 slug 将在其个人资料页面中使用,slug 被解析以从该州检索公司数据。- 公司 id 在其他模型中记录为外键(假设是用户),用户的公司数据将通过其 id 获取。
现在,查看我的架构,我定义了一个 Company 实体,如下所示:
const options = {idAttribute: value => value.id};
const company = new schema.Entity("companies", undefined, options);
这都是通过 id 来查询公司的,但是如果我想在访问https://example.com/company/company-slug/时检索当前公司,那么我需要使用 lodash 过滤我的主机实体,如下所示
_.find(state.entities.companies, company => company.slug === "company-slug")
这并不理想。
什么是更好的方法?在状态中保留 slug → id 的地图?
entities
companies
1: {slug: "a", ...}
2: {slug: "b", ...}
...
allIds: [1, 2, ...]
slugsMap:
a: 1
b: 2
然后我就可以在我的选择器中找到我的公司,如下所示
const companies = state.entities.companies;
const companyId = companies.slugsMap["company-slug"];
const company = companies[companyId];
期待您能想出的出色解决方案!
编辑:在阅读了 JavaScript 中的数组与对象效率之后,我现在有点困惑。看起来数组比对象执行得更快,我们可以使用“关联数组”(带孔的数组)将数组索引与对象 ID 匹配。
解决方案
推荐阅读
- python - 代码看起来“不是pythonic” - 嵌套 np.where() 以将列添加到 pd.dataframe
- node.js - 如何在 Mac 上将 NPM 6.13.4 更新到 7.16.0?
- vue.js - 未定义带有 PixiOverlay 事件的 Vue
- java - 为什么一个 GET 请求会向 ServerSocket.accept() 发送 2 个请求?
- bash - 如何在多个文件的开头添加两行?
- c# - 我创建了一个模态组件,但它不起作用
- r - 将字符串传递给 fable 包中的函数模型
- java - RSocket-CLI:未解决的参考:clientTransport
- react-native - 放大对图像的原生反应,例如放大画廊图像,其中捏合中心的位置是恒定的
- domain-driven-design - CQRS:写模型可以消耗读模型吗?