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



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

但是,如果我不想在开始时加载所有任务(因为它们太多了(,我应该如何处理这个问题?

我是否应该只在任务实体集合中仅存储"当前视图的列表",并在用户切换到其他视图时将其清空?

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

有没有更好的选择?

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

  • 具有实体列表,并在需要加载新实体时将其追加到列表中
  • 同一列表还可以在需要时更新实体(@ngrx/实体upsertMany使这变得容易(
  • 有一个"当前列表",用于存储可见实体 ID
  • 有一个选择器,用于根据可见实体 ID 选择当前实体

状态如下所示:

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

最新更新