假设有任务和项目。有时用户希望查看他/她的所有任务,有时希望查看属于某个项目的任务。当所有任务在开始时加载时,所有这些不同的视图可能只使用 NgRx 选择器从任务实体集合中获取所需的内容(同时 NgRx 效果 + Firestore 状态更改将负责更新(。
但是,如果我不想在开始时加载所有任务(因为它们太多了(,我应该如何处理这个问题?
我是否应该只在任务实体集合中仅存储"当前视图的列表",并在用户切换到其他视图时将其清空?
我是否应该加载当前所需的内容,将其附加到任务实体集合并使用选择器?但是,以这种方式,我不确定如何处理更新(因为我想在所有 prevoius 查询上侦听状态更改可能有点矫枉过正(。
有没有更好的选择?
这里可能没有正确或错误的答案,但这是我们的做法:
- 具有实体列表,并在需要加载新实体时将其追加到列表中
- 同一列表还可以在需要时更新实体(@ngrx/实体
upsertMany
使这变得容易( - 有一个"当前列表",用于存储可见实体 ID
- 有一个选择器,用于根据可见实体 ID 选择当前实体
状态如下所示:
{
entities: {...},
entitiesById: {...},
visibleEntitiesIds: {...}
}