如何在normalizr中获取对嵌套实体的引用?

时间:2017-01-12 16:57:27

标签: normalizr

我正在规范一个级别嵌套的批量列表。如果第一级批次被称为主要,则嵌套的批次是奴隶。

// my schema
const lot = new schema.Entity('lots');
const lots = new schema.Array(lot);
lot.define({slaves: lots});

// my data
const list = [
  {
    id: 1,
    name: 'Lot #1',
    slaves: [
      {
        id: 2,
        name: 'Lot #2'
      }
    ]
  }, {
    id: 4,
    name: 'Lot #4',
    slaves: []
  }
];

normalize(list, lots);

我明白了:

{
  entities : {
    lots: {
      '1': {
        id: 1,
        name: 'Lot #1',
        slaves: [2]
      },
      '2': {
        id: 2,
        name: 'Lot #2'
      },
      '4': {
        id: 4,
        name: 'Lot #4',
        slaves: []
      }
    }
  },
  result : [1, 4]
}

它有什么问题。但我想在标准化结果中添加更多内容,我不知道如何。

  • 在规范化的奴隶上拥有主地段号
  • 结果
  • 上还有一系列奴隶ID

所以前面的例子将按照以下标准化:

{
  entities : {
    lots: {
      '1': {
        id: 1,
        name: 'Lot #1',
        slaves: [2]
      },
      '2': {
        id: 2,
        name: 'Lot #2',
        master: 1
      },
      '4': {
        id: 4,
        name: 'Lot #4',
        slaves: []
      }
    }
  },
  result : {
    masters: [1, 4],
    slaves: [2],
  }
}

这可以用normalizr吗?

1 个答案:

答案 0 :(得分:2)

  

在规范化的奴隶上拥有主地段号

使用自定义processEntity功能绝对可以实现。有一个example here。简而言之:

const processStrategy = (value, parent, key) => ({
  ...value,
  master: key === 'slaves' ? parent.id : undefined
});
const lot = new schema.Entity('lots', { processStrategy });
  

结果

中还有一系列从属ID

这是不可能的。 result始终取决于传递给normalize的条目架构。