1

我正在使用 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 有一个results属性,它只有第一级字段 id,即使实体已规范化所有字段,包括嵌套字段。

归一化的结果

我想在结果数组中包含所有 id,包括嵌套的。我错过了什么?

4

2 回答 2

2

我想在结果数组中包含所有 id,包括嵌套的。我错过了什么?

这就是 Normalizr 的工作原理。返回result的格式始终与输入数据的格式相同。您将无法从 Normalizr 获得您所要求的内容。

但是,如果您只是在寻找 的列表blocks,请从entities:

const blockIds = Object.keys(normalizedData.entities.blocks);
于 2017-03-31T13:19:03.203 回答
0

您应该考虑normalized form在 redux 中为您的数据结构使用 a 。如果您的应用程序需要增加复杂性,这是可取的。

有一篇关于 redux 文档的有趣文章。 http://redux.js.org/docs/recipes/reducers/NormalizingStateShape.html

规范化形式从 db 对应方获取一些想法并Normalizr以这种方式工作,因此您的请求与工作方式并不真正匹配Normalizr

如果您确实需要以这种方式解决,请考虑@Paul Armstrong 的解决blocks方法。

于 2017-03-31T14:35:06.487 回答