对Normalizr实体使用两个id键属性的最佳方法

时间:2018-08-09 03:12:03

标签: reactjs redux normalizr

考虑一个模型公司,其id和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")

这不理想。

有什么更好的方式进行?是否在状态下保持→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];

期待您可以提出出色的解决方案!

编辑: 看完Array vs. Object efficiency in JavaScript之后,我有点困惑了。看起来数组的执行速度比对象快,我们可以使用“关联数组”(带有孔的数组)将数组索引与对象ID匹配。

0 个答案:

没有答案