如何获取对 normalizr 中嵌套实体的引用?
How to get a reference to the nested entities in normalizr?
我正在规范化 一级 嵌套地块列表。第一级地段称为主人,嵌套的是奴隶。
// my schema
const lot = new schema.Entity('lots');
const lots = new schema.Array(lot);
lot.define({slaves: lots});
// my data
const list = [
{
id: 1,
name: 'Lot #1',
slaves: [
{
id: 2,
name: 'Lot #2'
}
]
}, {
id: 4,
name: 'Lot #4',
slaves: []
}
];
normalize(list, lots);
我明白了:
{
entities : {
lots: {
'1': {
id: 1,
name: 'Lot #1',
slaves: [2]
},
'2': {
id: 2,
name: 'Lot #2'
},
'4': {
id: 4,
name: 'Lot #4',
slaves: []
}
}
},
result : [1, 4]
}
有什么不妥。但我想在规范化结果中添加更多内容,但我不知道该怎么做。
- 在规范化的奴隶上拥有主人的批号
- 结果中还有一个从属 ID 数组
所以前面的例子将被归一化为:
{
entities : {
lots: {
'1': {
id: 1,
name: 'Lot #1',
slaves: [2]
},
'2': {
id: 2,
name: 'Lot #2',
master: 1
},
'4': {
id: 4,
name: 'Lot #4',
slaves: []
}
}
},
result : {
masters: [1, 4],
slaves: [2],
}
}
这可以用 normalizr 实现吗?
Have the master lot id on the normalized slaves
这绝对可以使用自定义 processEntity
函数。有一个example here。简而言之:
const processStrategy = (value, parent, key) => ({
...value,
master: key === 'slaves' ? parent.id : undefined
});
const lot = new schema.Entity('lots', { processStrategy });
An array of slaves id's also on the result
这是不可能的。 result
始终依赖于传递给 normalize
.
的条目架构
我正在规范化 一级 嵌套地块列表。第一级地段称为主人,嵌套的是奴隶。
// my schema
const lot = new schema.Entity('lots');
const lots = new schema.Array(lot);
lot.define({slaves: lots});
// my data
const list = [
{
id: 1,
name: 'Lot #1',
slaves: [
{
id: 2,
name: 'Lot #2'
}
]
}, {
id: 4,
name: 'Lot #4',
slaves: []
}
];
normalize(list, lots);
我明白了:
{
entities : {
lots: {
'1': {
id: 1,
name: 'Lot #1',
slaves: [2]
},
'2': {
id: 2,
name: 'Lot #2'
},
'4': {
id: 4,
name: 'Lot #4',
slaves: []
}
}
},
result : [1, 4]
}
有什么不妥。但我想在规范化结果中添加更多内容,但我不知道该怎么做。
- 在规范化的奴隶上拥有主人的批号
- 结果中还有一个从属 ID 数组
所以前面的例子将被归一化为:
{
entities : {
lots: {
'1': {
id: 1,
name: 'Lot #1',
slaves: [2]
},
'2': {
id: 2,
name: 'Lot #2',
master: 1
},
'4': {
id: 4,
name: 'Lot #4',
slaves: []
}
}
},
result : {
masters: [1, 4],
slaves: [2],
}
}
这可以用 normalizr 实现吗?
Have the master lot id on the normalized slaves
这绝对可以使用自定义 processEntity
函数。有一个example here。简而言之:
const processStrategy = (value, parent, key) => ({
...value,
master: key === 'slaves' ? parent.id : undefined
});
const lot = new schema.Entity('lots', { processStrategy });
An array of slaves id's also on the result
这是不可能的。 result
始终依赖于传递给 normalize
.