用normalizr标准化api响应

时间:2016-02-26 18:16:19

标签: reactjs redux normalizr

因此,当您请求资产时,端点会以类似的方式响应。 Bios只是一个例子。

{
  _embedded: {
    bios: [
      {
        name: 'Blorp Gorp',
        id: 256,
        _links: {},
        arrayCollection: [...],
        objectCollection: [...],
        ...
      },
      ...
    ],
  _links: {},
}

而且我想把它压扁到类似的东西,我甚至不确定这是否有意义:

{
  results: [256, 257],
  entities: {
    bios: {
      256: {...},
      257: {...}
    },
    arrayCollection: {
      256: [...],
      257: [...]
    },
    objectCollection: {
      256: {...},
      257: {...}
    }
  }
}

但我无法让Schemas在击中他们的实体之前识别任何嵌套。如果我通过normalize(camelizedJson.embedded.bios, bioSchema),它就可以了,但是如果我通过它normalize(camelizedJson.embedded, bioSchema)我无法理解我想要解析bios

我想我可以将另一个变量传递给中间件,使其成功解析嵌入式密钥。

2 个答案:

答案 0 :(得分:2)

  

但我无法让Schema在遇到实体之前识别任何嵌套。如果我通过normalize(camelizedJson.embedded.bios,bioSchema),它可以正常工作,但是如果我传递它normalize(camelizedJson.embedded,bioSchema)我就无法理解我想要解析bios。

您可能需要docker images。模式可以嵌套在纯JavaScript对象中,例如:

docker images -a

答案 1 :(得分:0)

我认为你需要创建一个模式(这里为假插图名称)“MyArrayThing”和“MyObjectThing”,然后在“Bio”模式定义中定义“arrayCollection”和“objectCollection”子字段使用Normalizr的arrayOf(SomeSchemaObject)功能。然后,一旦定义了单个Bio对象的外观,您的解析命令也需要大致类似normalize(camelizedJson.embedded.bios, arrayOf(Bio))