NGRX中的多参考说明

时间:2017-06-28 12:07:26

标签: ngrx state-management ngrx-store

我有一个应用程序,可以容纳人们和他们的笔记。这些笔记可以与很多人联系起来(例如,对于Person1和Person3,会出现Note1)。

我正在使用NGRX将我的状态保存在记忆中。

现在查看ngrx示例应用程序,您可以获得一系列书籍的好例子。在那里,他们使用一个状态来保存由bookId索引的对象数组(用于快速检索)。

当集合中的项目(在我的情况下是笔记)可能与很多人有关时,如何做到这一点?

我首先使用人员的uid索引对象数组:

export interface NoteCollection {
    [uid: string]: Note[];
}

考虑:

  • 随着时间的推移会有很多笔记,因此状态数据可能会相当大
  • 为每个被引用的人创建一个注释对象似乎是一个相当糟糕的想法(数据冗余)
  • 将经常添加/编辑/删除注释,因此需要最新数据
  • 将来会有一个脱机数据库
  • 将整个笔记存储在状态中将需要一些.filter()函数用于访问的每个人页面。随着国家的增长,这可能会变得缓慢:
 export const getPersonNotes: any = createSelector(getNotes, 
    getSelectedPerson, (notes: any, selectedPersonId: string) => {
      return notes.filter((note: Note) => note.refUid === selectedId);
    });

替代

  • 每次需要与人有关的笔记时,不要通过打电话来存储笔记

有什么建议吗?替代方案感觉很奇怪,因为为什么当使用一半的状态不在redux中时才使用ngrx?

1 个答案:

答案 0 :(得分:0)

您可以执行以下操作来删除Note冗余问题:

interface NoteCollection {
    [noteId: string]: Note[];
}

interface PersonCollection {
    [personId: string]: Person;
}

interface Person {
    noteIds: string[];  // an array of noteIds. 
}