【问题标题】:Normalize api response with normalizr使用 normalizr 规范化 api 响应
【发布时间】:2016-06-10 02:12:17
【问题描述】:

因此,当您请求资产时,端点会以类似的方式响应。 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: {...}
    }
  }
}

但我无法让模式在它们击中实体之前识别任何嵌套。如果我通过normalize(camelizedJson.embedded.bios, bioSchema),它可以工作,但如果我通过normalize(camelizedJson.embedded, bioSchema),我无法意识到我想解析bios

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

【问题讨论】:

    标签: reactjs redux normalizr


    【解决方案1】:

    我相信您需要创建一个定义(此处为说明的假名)“MyArrayThing”和“MyObjectThing”的架构,然后在“Bio”架构定义中,使用“arrayCollection”和“objectCollection”子字段定义Normalizr 的arrayOf(SomeSchemaObject) 函数。然后,一旦您定义了单个 Bio 对象的外观,您的解析命令也需要大致类似于 normalize(camelizedJson.embedded.bios, arrayOf(Bio))

    【讨论】:

      【解决方案2】:

      但我无法让模式在它们击中实体之前识别任何嵌套。如果我通过 normalize(camelizedJson.embedded.bios, bioSchema),它可以工作,但是如果我通过 normalize(camelizedJson.embedded, bioSchema) 我无法让它意识到我想解析 bios。

      您可能想要normalize(camelizedJson.embedded, { bios: bioSchema })。 Schema 可以嵌套在纯 JavaScript 对象中,例如:

      normalize(camelizedJson.embedded, {
        bios: bioSchema,
        lols: lolSchema,
        wow: arrayOf({
          wat: {
            ugh: ughSchema
          }
        })
      })
      

      【讨论】:

        猜你喜欢
        • 2020-04-24
        • 2019-03-24
        • 2018-10-19
        • 2016-06-21
        • 2017-06-23
        • 2018-04-09
        • 2018-05-23
        • 2018-03-05
        • 2021-05-22
        相关资源
        最近更新 更多