NgRx + Entities + Firestore - 当我不想一次加载所有实体时如何处理?

NgRx + Entities + Firestore - how to deal with it when I don't want to load all entities at once?

假设有任务和项目。有时用户想要查看所有 his/her 任务,有时想要查看属于某个项目的任务。当所有任务在开始时加载时,所有这些不同的视图可能只使用 NgRx 选择器从任务实体集合中获取必要的内容(同时 NgRx 效果 + Firestore stateChanges 将负责更新)。

但是,如果我不想一开始就加载所有任务(因为任务太多),我应该如何解决这个问题?

我应该只存储在任务实体集合中 "the current view's list" 并在用户切换到另一个实体集合时将其清空吗?

我应该加载当前所需的内容,将其附加到任务实体集合并使用选择器吗?但是,通过这种方式,我不确定如何处理更新(因为我猜想在所有 prevoius 查询上监听 stateChanges 可能有点矫枉过正)。

有没有更好的选择?

这里可能没有正确或错误的答案,但我们是这样做的:

  • 有一个实体列表,并在需要加载新实体时将其附加到列表中
  • 同一个列表还可以在需要时更新实体(@ngrx/entities upsertMany 让这变得简单)
  • 有一个 "current list" 存储可见实体 ID
  • 拥有select或select基于可见实体ID的当前实体

状态如下:

{
   entities: {...},
   entitiesById: {...},
   visibleEntitiesIds: {...}
}