как исправить проблему, когда объект ngrx возвращал неопределенный идентификатор

#ngrx-entity

#ngrx-entity

Вопрос:

почему я получаю эту ошибку ниже и как это исправить.

Объект, переданный в реализацию selectId, возвращал неопределенное значение. Вероятно, вам следует предоставить свою собственную реализацию selectId. Объект, который был передан:

Ответ №1:

Вероятно, вы передаете объект, у которого нет свойства id. Итак, вам нужно переопределить selectId метод при EntityAdapter создании.

 export const adapter: EntityAdapter<YourInterface> =
  createEntityAdapter<YourInterface>({
    selectId: nameofclass => nameofclass.yourID
  });
  

Комментарии:

1. Куда это ведет? Я пытался добавить его, но он не попадает в него.

2. Это происходит при инициализации адаптера для этого конкретного объекта @Godrules500

Ответ №2:

Я исправил эту проблему, указав метаданные для нескольких объектов одновременно в EntityMetadataMap:

 // entity-store.module.ts

...

export function selectEventId(event: Event): number {
  return event.eventId;
}

export const entityMetadata: EntityMetadataMap = {
  User: {},
  Event: {
    selectId: selectEventId
  }
};

...
  

Ответ №3:

Эта ошибка обычно связана с отсутствующим первичным ключом объекта:

Каждый тип объекта должен иметь первичный ключ, значением которого является целое число или строка. Библиотека данных NgRx предполагает, что объект имеет свойство «id», значением которого является первичный ключ.

Не у каждого объекта будет свойство первичного ключа с именем «id». Для некоторых объектов первичный ключ может иметь любое имя или может быть комбинированным значением двух или более свойств. В этих случаях вы всегда указываете первичный ключ для этого объекта с помощью функции:

selectId

Эта функция возвращает значение первичного ключа указанного поля / свойства этого объекта.

Например:

Объект Villain не имеет первичного ключа с именем «id», но он называется «ключ». Для этого объекта функция selectId такова:

 selectId: (villain: Villain) => villain.key;
  

И полное объявление метаданных объекта может быть чем-то вроде:

Файл: ../entity-store.module.ts

 const entityMetadata: EntityMetadataMap = {

    ...

    Villain: {
                       // We MUST specify a primary key / id field for each entity
                       // (if it does not have its own prop/field named: 'id') !!!
        selectId: (villain: Villain) => villain.key, // <--- 

                       // optional setting - filter
        filterFn: filterForVillains,
                       // optional setting - sort order
        sortComparer: sortVillains
    },

    Hero { ... },

    ....

}