如何使用 Normalizr 在 Redux 状态中展平多对多关系?

MSD*_*MSD 5 reactjs redux normalizr

设想

我们有一个映射以下关系的数据库:

  • Atag有很多campaigns
  • Acampaign有很多tags
  • campaigns和之间的关系tags由一个称为 a 的关联实体表示campaign_tag
  • campaign_tag实体拥有priority属性

当我们的关联实体没有唯一的 ID/值时,我们如何实现normalizr(或任何类似的库)来生成一个扁平化的应用程序状态来解释我们的关联实体?

笔记/杂念

我见过的其他例子只绘制了原始实体,似乎更适合一对多或一对一的关系。他们通常产生这样的状态树:

{
  entities: {
    campaigns: {
      '1': { id: 1, name: 'Ace', tags: [1, 2, 3] },
      ...
    },
    tags: {
      '1': { id: 1, name: 'Example Tag', campaigns: [1, 2, 3] },
      ...
    }
  },
  ...
}
Run Code Online (Sandbox Code Playgroud)

我们的关联实体会进入那个entities组吗?我们应该只添加唯一的 ID 吗?这似乎适得其反。扁平化这种关系是否合适?

任何帮助表示赞赏,谢谢。

Fra*_*sso 2

应用场景:

  1. 您控制 API:我将发送如下对象:

    campaigns: [{
      id: <id>,
      name: <name>,
    }],
    tags: [{ id: <id>, name: <name> }],
    campaign_tags: [{campaign_id, tag_id, priority}]
    
    Run Code Online (Sandbox Code Playgroud)

    因此,这将易于管理并避免信息重复。当您使用 redux connect 挂载组件时,您可以创建一个选择器来填充您的活动标签以添加到组件的属性中。

  2. 您无法控制 API。在这种情况下,我需要知道您从服务器获得什么类型的响应才能推荐某些内容。