我正在使用normalizr来压缩像下面这样的结构:
{
"fields":[{
"id":"29",
"text": "something"
}, {
"id":"16",
"text": "something"
"fields":[{
"id":"17",
"text": "something"
}]
}, {
"id":"18",
"text": "something"
}
}
我的结构有一个字段数组,字段也可能有嵌套字段。只允许一级嵌套。
我想做的是:
const block = new schema.Entity('fields')
const blockList = new schema.Array(block)
block.define({
fields: blockList
})
const normalizedData = normalize(originalData, blockList)
运行此代码段后,normalizedData具有结果属性,并且它只有第一级字段ID,即使实体已将所有字段规范化,包括嵌套的。
我想在结果数组中包含所有id,包括嵌套的id。我错过了什么?
答案 0 :(得分:2)
我想在结果数组中包含所有id,包括嵌套的id。我错过了什么?
这就是Normalizr的工作原理。返回的blocks
始终采用与输入数据相同的格式。您将无法从Normalizr获得您要求的内容。
但是,如果您只是在寻找entities
的列表,请从const blockIds = Object.keys(normalizedData.entities.blocks);
中提取
{{1}}
答案 1 :(得分:0)
您应该考虑在redux中使用normalized form
作为数据结构。
如果您的应用程序需要增加复杂性,这是可取的。
有一篇关于redux文档的有趣文章。 http://redux.js.org/docs/recipes/reducers/NormalizingStateShape.html
标准化表单从数据库对应方面获取一些想法,Normalizr
以这种方式工作,因此您的请求与Normalizr
的工作方式并不完全匹配。
如果您确实需要以这种方式获得blocks
,请考虑@Paul Armstrong的答案。