首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Normalizr的双向链接

使用Normalizr的双向链接
EN

Stack Overflow用户
提问于 2017-07-03 18:00:10
回答 1查看 129关注 0票数 0

我有一个区域列表,它是从API获取的。在这个列表中,有多个建筑物。在JS中如下所示:

代码语言:javascript
复制
  const regions = [
  {
    guid: 'REGION1-GUID',
    name: 'Region 1',
    buildings: [
      {
        guid: 'REGION1-BUILDING1-GUID',
        name: 'Region 1 Building 1'
      },
      {
        guid: 'REGION1-BUILDING2-GUID',
        name: 'Region 1 Building 2'
      }
    ]
  },
  {
    guid: 'REGION2-GUID',
    name: 'Region 2',
    buildings: [
      {
        guid: 'REGION2-BUILDING1-GUID',
        name: 'Region 2 Building 1'
      },
      {
        guid: 'REGION2-BUIDLING2-GUID',
        name: 'Region 2 Building 2'
      }
    ]
  }
];

现在,我想使用normalizr来规范化这个JS对象。我稍后要做的是从一座建筑中获取区域。

所以我试着做以下几件事:

代码语言:javascript
复制
// Define the buildings schema
const building = new schema.Entity('building', {}, { idAttribute: 'guid' });

// Define the regions schema
const region = new schema.Entity(
  'regions',
  {
    buildings: [building]
  },
  { idAttribute: 'guid' }
);

const regionList = [region];

const normalizeData = () => {
  const normalizedData = normalize(data, regionList);

这确实标准化了我的对象,normalizedData是这样的:

代码语言:javascript
复制
{  
   "entities":{  
      "building":{  
         "REGION1-BUILDING1-GUID":{  
            "guid":"REGION1-BUILDING1-GUID",
            "name":"Region 1 Building 1"
         },
         "REGION1-BUILDING2-GUID":{  
            "guid":"REGION1-BUILDING2-GUID",
            "name":"Region 1 Building 2"
         },
         "REGION2-BUILDING1-GUID":{  
            "guid":"REGION2-BUILDING1-GUID",
            "name":"Region 2 Building 1"
         },
         "REGION2-BUIDLING2-GUID":{  
            "guid":"REGION2-BUIDLING2-GUID",
            "name":"Region 2 Building 2"
         }
      },
      "regions":{  
         "REGION1-GUID":{  
            "guid":"REGION1-GUID",
            "name":"Region 1",
            "buildings":[  
               "REGION1-BUILDING1-GUID",
               "REGION1-BUILDING2-GUID"
            ]
         },
         "REGION2-GUID":{  
            "guid":"REGION2-GUID",
            "name":"Region 2",
            "buildings":[  
               "REGION2-BUILDING1-GUID",
               "REGION2-BUIDLING2-GUID"
            ]
         }
      }
   },
   "result":[  
      "REGION1-GUID",
      "REGION2-GUID"
   ]
}

但是要获得建筑物的区域,我需要遍历每个区域,并检查该建筑物是否包含在列表中。我不会通过标准化获得任何附加值。

这将是完美的,如果我能够在两个方向链接。每个区域实体都有一个建筑guid列表,每个建筑都有一个区域guid。

有没有办法在normalizr中实现这一点?最好的方法是什么?

谢谢你的帮助。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-07-03 18:16:32

我尝试了一些方法,找到了一个可行的解决方案。我不知道是否有更好的方法,但它是非常干净的代码,它是工作的。

我只需将建筑实体的定义更改为:

代码语言:javascript
复制
// Define buildings schema
const building = new schema.Entity(
  'building',
  {},
  {
    idAttribute: 'guid',
    processStrategy: (entity, parent) => ({ ...entity, regionGuid: parent.guid })
  }
);

这会将属性"regionGuid“添加到包含该区域的guid的建筑物中。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44882721

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档