Normalizr 和递归嵌套结构
Normalizr and recursive nested structure
我正在使用 normalizr 来展平结构,如下所示:
{
"fields":[{
"id":"29",
"text": "something"
}, {
"id":"16",
"text": "something"
"fields":[{
"id":"17",
"text": "something"
}]
}, {
"id":"18",
"text": "something"
}
}
我的结构有一个 fields 数组,field 也可能有嵌套字段。只允许一层嵌套。
我想做的是:
const block = new schema.Entity('fields')
const blockList = new schema.Array(block)
block.define({
fields: blockList
})
const normalizedData = normalize(originalData, blockList)
在 运行 这个片段之后,normalizedData 有一个 results 属性 并且它只有第一级字段 ID,即使 entities 规范化了所有字段,包括嵌套字段。
我想在 results 数组中包含所有 ID,包括嵌套 ID。我错过了什么?
I'd like to have in the results array all the ids, including the nested ones. What am I missing?
这就是 Normalizr 的工作原理。返回的 result
始终采用与输入数据相同的格式。您将无法从 Normalizr 获得您想要的东西。
但是,如果您只是查找 blocks
的列表,请从 entities
:
中提取该列表
const blockIds = Object.keys(normalizedData.entities.blocks);
您应该考虑在 redux 中为您的数据结构使用 normalized form
。
如果您的应用程序需要增加复杂性,建议这样做。
有一篇关于 redux 文档的有趣文章。
http://redux.js.org/docs/recipes/reducers/NormalizingStateShape.html
规范化形式从 db 对应方那里汲取了一些想法,Normalizr
以这种方式工作,因此您的请求与 Normalizr
的工作方式并不完全匹配。
如果您确实需要以这种方式获取 blocks
,请考虑@Paul Armstrong 的解决方法。
我正在使用 normalizr 来展平结构,如下所示:
{
"fields":[{
"id":"29",
"text": "something"
}, {
"id":"16",
"text": "something"
"fields":[{
"id":"17",
"text": "something"
}]
}, {
"id":"18",
"text": "something"
}
}
我的结构有一个 fields 数组,field 也可能有嵌套字段。只允许一层嵌套。
我想做的是:
const block = new schema.Entity('fields')
const blockList = new schema.Array(block)
block.define({
fields: blockList
})
const normalizedData = normalize(originalData, blockList)
在 运行 这个片段之后,normalizedData 有一个 results 属性 并且它只有第一级字段 ID,即使 entities 规范化了所有字段,包括嵌套字段。
我想在 results 数组中包含所有 ID,包括嵌套 ID。我错过了什么?
I'd like to have in the results array all the ids, including the nested ones. What am I missing?
这就是 Normalizr 的工作原理。返回的 result
始终采用与输入数据相同的格式。您将无法从 Normalizr 获得您想要的东西。
但是,如果您只是查找 blocks
的列表,请从 entities
:
const blockIds = Object.keys(normalizedData.entities.blocks);
您应该考虑在 redux 中为您的数据结构使用 normalized form
。
如果您的应用程序需要增加复杂性,建议这样做。
有一篇关于 redux 文档的有趣文章。 http://redux.js.org/docs/recipes/reducers/NormalizingStateShape.html
规范化形式从 db 对应方那里汲取了一些想法,Normalizr
以这种方式工作,因此您的请求与 Normalizr
的工作方式并不完全匹配。
如果您确实需要以这种方式获取 blocks
,请考虑@Paul Armstrong 的解决方法。