Normalizr:按类型而不是多态映射的模式识别实体

时间:2017-07-13 14:24:04

标签: javascript normalizr

对于Normalizr中的Union等多态模式,对于模式定义和数据:

const data = { owner: { id: 1, type: 'user', name: 'Anne' } };

const user = new schema.Entity('users');
const group = new schema.Entity('groups');
const unionSchema = new schema.Union({
  user: user,
  group: group
}, 'type');

const normalizedData = normalize(data, { owner: unionSchema });

规范化数据采用以下形式:

{
  entities: {
    users: { '1': { id: 1, type: 'user', name: 'Anne' } }
  },
  result: { owner: { id: 1, schema: 'user' } }
}

实体在架构键上键入,在本例中为users,但结果对象仅包含UnionSchema定义中架构的键。这可能使得在没有完全非规范化的情况下很难匹配元素。

是否有一些更好的方法可以使用normalizr对这些数据进行规范化,以便在给定entities时更容易从result中提取实体?出于我的目的,理想情况下,数据可以通过以下方式进行标准化:

const data = { owner: { id: 1, type: 'users', name: 'Anne' } };

{
  entities: {
    users: { '1': { id: 1, type: 'users', name: 'Anne' } }
  },
  result: { owner: { id: 1, type: 'users' } }
}

请注意,类型与实体键匹配(这非常简单),结果中键的名称为type(如果您想要使用更复杂的数据,则更多的是痛苦)。我怀疑这种规范化会使反规范化变得更难,但我只对归一化感兴趣。

1 个答案:

答案 0 :(得分:1)

得到了一个答案: https://github.com/paularmstrong/normalizr/issues/281

显然,这种行为是有意的,不会改变 - 没有办法使用Normalizr来做我所要求的。