Как упоминалось в этом выпуске :
Normalizr никогда не сможет генерировать для вас уникальные идентификаторы.Мы не делаем никаких напоминаний или каких-либо внутренних действий, так как это было бы ненужным для большинства людей.
Ваше рабочее решение в порядке, но не получится, если позже вы снова получите один из этих объектов из другой конечной точки API.
Я бы порекомендовал найти что-то постоянное и уникальное для ваших сущностей и использовать это как нечто для генерации уникальных идентификаторов из.
И затем, как упомянуто в документации, вам нужноустановить idAttribute
для замены 'id' другим ключом:
const data = { id_str: '123', url: 'https://twitter.com', user: { id_str: '456', name: 'Jimmy' } };
const user = new schema.Entity('users', {}, { idAttribute: 'id_str' });
const tweet = new schema.Entity('tweets', { user: user }, {
idAttribute: 'id_str',
// Apply everything from entityB over entityA, except for "favorites"
mergeStrategy: (entityA, entityB) => ({
...entityA,
...entityB,
favorites: entityA.favorites
}),
// Remove the URL field from the entity
processStrategy: (entity) => omit(entity, 'url')
});
const normalizedData = normalize(data, tweet);
РЕДАКТИРОВАТЬ
Вы всегда можете предоставить уникальные идентификаторы, используя внешнюю библиотеку или вручную:
inputData.doctors = inputData.doctors.map((doc, idx) => ({
...doc,
id: `doctor_${idx}`
}))