NgRx + Entities + Firestore - как с этим бороться, если я не хочу загружать все сущности одновременно?

Допустим, есть задачи и проекты. Иногда пользователь хочет видеть все свои задачи, а иногда и задачи, относящиеся к определенному проекту. Когда все задачи загружаются в начале, все эти различные представления могут просто использовать селекторы NgRx, чтобы получить то, что необходимо из коллекции сущностей задач (в то же время эффект NgRx + Firestore stateChanges позаботится об обновлениях).

Однако, если я не хочу загружать все задачи в начале (потому что их слишком много), как мне подойти к проблеме?

Должен ли я хранить только в коллекции объектов задачи только "список текущего представления" и очищать его, когда пользователь переключается на другой?

Должен ли я загрузить то, что необходимо для текущего, добавить его в коллекцию сущностей задач и использовать селекторы? Однако в этом случае я не уверен, что делать с обновлениями (так как полагаю, что прослушивание stateChanges по всем предварительным запросам может быть немного излишним).

Есть ли лучшие альтернативы?

1 ответ

Решение

Вероятно, здесь нет правильного или неправильного ответа, но вот как мы это делаем:

  • Иметь список объектов и добавлять новые объекты в список, когда они должны быть загружены
  • Этот же список также может обновлять сущности при необходимости (@ngrx/entity upsertMany делает это легко)
  • Иметь "текущий список", в котором хранятся идентификаторы видимых объектов
  • Иметь селектор для выбора текущих объектов на основе идентификаторов видимых объектов

Состояние выглядит следующим образом:

{
   entities: {...},
   entitiesById: {...},
   visibleEntitiesIds: {...}
}
Другие вопросы по тегам