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

脚本

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

>标签包含许多广告系列
>广告系列包含许多标签
>广告系列和代码之间的关系由名为campaign_tag的关联实体表示
> campaign_tag实体具有优先级属性

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

笔记/杂项思考

我见过的其他例子只有原始实体被映射出来,似乎更适合一对多或一对一的关系.他们通常会生成如下的状态树:

{
  entities: {
    campaigns: {
      '1': { id: 1, name: 'Ace', tags: [1, 2, 3] },
      ...
    },
    tags: {
      '1': { id: 1, name: 'Example Tag', campaigns: [1, 2, 3] },
      ...
    }
  },
  ...
}

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

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

最佳答案 场景:

>你控制API:我会发送这样的对象:

campaigns: [{
  id: <id>,
  name: <name>,
}],
tags: [{ id: <id>, name: <name> }],
campaign_tags: [{campaign_id, tag_id, priority}]

因此,这将易于管理并避免重复信息.使用redux connect挂载组件时,您可以创建一个选择器来填充广告系列代码,以添加到组件的属性中.
>您无法控制API.在这种情况下,我需要知道你从服务器获得什么类型的响应,以便推荐一些东西.

点赞