我有一个应用程序,其中包含人员和有关他们的注释。注释是这样的,它们可以与许多人相关(例如,注释 1 将出现在人员 1 和人员 3 上)。
我正在使用 NGRX 将我的状态保存在内存中。
现在查看 ngrx 示例应用程序,您可以获得一个很好的书籍集合示例。在那里,他们使用一个状态来保存由 bookId 索引的对象数组(用于快速检索)。
当收藏中的项目(在我的例子中是笔记)可能与许多人相关时,如何做到这一点?
我首先使用人员的 uid 对对象数组进行索引:
export interface NoteCollection {
[uid: string]: Note[];
}
考虑:
- 随着时间的推移会有很多笔记,因此状态数据可能会相当大
- 为每个被引用的人创建一个笔记对象似乎是一个相当糟糕的主意(数据冗余)
- 笔记会经常被添加/编辑/删除,所以需要最新的数据
- 以后会涉及到离线db
- 将整个笔记存储在状态中需要为每个访问的人员页面提供一些 .filter() 函数。随着状态的增长,这可能会变得缓慢:
export const getPersonNotes: any = createSelector(getNotes,
getSelectedPerson, (notes: any, selectedPersonId: string) => {
return notes.filter((note: Note) => note.refUid === selectedId);
});
替代方案:
- 每次您需要与人相关的笔记时,都不要通过调用 api 来将笔记存储在 state 中
有什么建议么?替代方案感觉很奇怪,因为当一半状态不在redux中时,为什么还要使用ngrx呢?