6

对于多态模式,例如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 规范化这些数据,以便更容易entitiesresult就我的目的而言,理想情况下,数据可以通过以下方式标准化:

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(如果您想使用更复杂的数据来做这件事,那就更麻烦了)。我怀疑这种规范化会使非规范化变得更加困难,但我只对规范化感兴趣。

4

1 回答 1

1

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

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

于 2017-10-13T14:57:01.257 回答