javascript – 如何使用Normalizr定义递归模型的模式

前端之家收集整理的这篇文章主要介绍了javascript – 如何使用Normalizr定义递归模型的模式前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
尝试规范化我的有效负载有一些问题,该有效负载包含与使用 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
}
原文链接:https://www.f2er.com/js/159524.html

猜你在找的JavaScript相关文章