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: {...}
}
假设有任务和项目。有时用户想要查看所有 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: {...}
}