【问题标题】:Normalizing a nested entity that shares the current schema规范化共享当前模式的嵌套实体
【发布时间】:2017-07-20 05:31:03
【问题描述】:

我的目标是规范化这个对象:

{
  talks: [
    {
      id: 1755,
      speakers: [
        {
          id: 1487,
          name: 'John Doe',
        },
      ],
      related_talks: [{
        id: 14,
        speakers: [{
          id: 125,
          name: 'Jane Doe',
        }],
        event: {
          id: 181,
          name: 'First Annual',
        },
      }],
      event: {
        id: 180,
        name: 'July Party',
      },
    },
  ],
};

进入这个结果:

{
  entities: {
    events: {
      181: {
        id: 181,
        name: 'First Annual'
      },
      180: {
        id: 180,
        name: 'July Party'
      }
    },
    speakers: {
      125: {
        id: 125,
        name: 'Jane Doe'
      },
      1487: {
        id: 1487,
        name: 'John Doe'
      }
    },
    talks: {
      1755: {
        id: 1755,
        event: 181,
        speakers: [ 1487 ],
        related_talks: [ 14 ],
      },
      14: {
        id: 14,
        speakers: [ 125 ],
        event: 180,
      }
    },
  },
  result: {
    talks: [ 1755, 14 ],
  },
}

如果您注意到,related_talks 中的项目将被视为与 talk 相同。

我的架构遵循示例并设置如下:

const speaker = new schema.Entity('speakers');
const event = new schema.Entity('events');

export const talk = new schema.Entity('talks', {
  speakers: [speaker],
  event,
});

talk.define({ related_talks: [talk] });

无论我尝试什么,我都无法将related_talks 中的项目添加到result.talks 数组中。但是,它位于entities 对象中。

为了适应这种情况,我的架构配置缺少什么?

【问题讨论】:

    标签: normalizr


    【解决方案1】:

    很遗憾,如果这是您的要求,Normalizr 不适合您。或者,如果您要按 ID 查找“谈话”列表,您可以使用 Object.keys(data.entities.talks)

    【讨论】:

    • 感谢您的超快速回答 - 您能解释一下为什么我可能想以这种方式做事吗?这不是一个硬性要求,但这是我预期 normalizr 工作的方式。
    • 它是这样工作的,因为这是输入的实际结果。您使用单个实体对数组进行规范化,因此结果是它的规范化形式。
    • 所以解决方案是将相关谈话向上移动到谈话数组(在 API 端),并在 talk 对象内,将相关谈话数组更改为的 ID每次谈话?这样talks 数组就真的包含了所有的谈话内容?
    猜你喜欢
    • 2018-10-10
    • 2021-12-06
    • 2017-12-16
    • 1970-01-01
    • 1970-01-01
    • 2018-05-23
    • 1970-01-01
    • 2015-02-21
    • 1970-01-01
    相关资源
    最近更新 更多