尝试规范化我的有效负载有一些问题,该有效负载包含与使用
Normalizr的父类型相同类型的嵌套模式
例如,我有一个初始对象(Menu),它有一个子(Sections),它是一个带有截面的对象数组,可以深入.
{ id: 123,sections: [{ id: 1,sections:[{ id: 4,sections: [ id: 5,sections: [] ] }] },{ id: 2,sections:[] },{ id: 3,sections:[] }] }
我开始创建一个菜单模式,其中定义中的部分链接到部分模式,适用于第一次传递,但后来不会处理部分的子节点,所以我在节模式中添加了一个后续定义同名(值得一试)但它没有用.
const section = new schema.Entity('sections') const sections = new schema.Entity('sections',{ sections: section }) const menu = new schema.Entity('menu',{ sections: [ sections ] }) section.define({ sections })
我希望最终得到以下对象:
{ entities: { menu: { sections: [1,2,3] },sections: [{ 1: { id: 1,sections: [4] },2: { id: 2,sections: [] },3: { id: 3,4: { id: 4,sections: [5] },5: { id: 5,}] } }
解决方法
您的sections模式应该是一个Array.
const section = new schema.Entity('sections') const sections = new schema.Array(section); section.define({ sections }); const menu = new schema.Entity('menu',{ sections });
然后,在使用它…
const data = { id: 123,sections: [ { id: 5,sections: [] } ] }] },sections:[] }] }; normalize(data,menu)
将返回:
{ "entities": { "sections": { "1": { "id": 1,"sections": [ 4 ] },"2": { "id": 2,"sections": [] },"3": { "id": 3,"4": { "id": 4,"sections": [ 5 ] },"5": { "id": 5,"sections": [] } },"menu": { "123": { "id": 123,"sections": [ 1,3 ] } } },"result": 123 }