Normalizr:按类型而不是多态映射的架构标识实体



对于多态模式(如 Normalizr 中的联合(,对于模式定义和数据:

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 定义中架构的键。这可能会导致以后在没有完全非规范化的情况下难以匹配元素。

有没有更好的方法来规范化这些数据,以便在给定result的情况下更容易从entities中提取实体?出于我的目的,理想情况下,数据可以从以下内容进行规范化:

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(如果您想使用更复杂的数据来执行此操作,则会更加痛苦(。我怀疑这种规范化会使非规范化变得更加困难,但我只对规范化感兴趣。

对此有答案: https://github.com/paularmstrong/normalizr/issues/281

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

最新更新