Я изучаю NGXS и у меня есть модель состояния с вложенными отношениями родитель / потомок, где есть некоторое количество родителей, у каждого из которых есть свой собственный набор детей (и внуков), что-то вроде этого:
state: {
parents: ParentModel[]
}
ParentModel {
children: ChildModel[]
}
ChildModel {
grandchildren: GrandChildren[]
}
etc.
Однако, когда состояние моделируется в реализациях с избыточностью / потоком, вышеприведенный пример (насколько я знаю) обычно нормализуется.
Я бы хотел иметь доступ к детям и внукам так, как это соответствует ментальной модели дерева состояний. Лучшее, что я придумал, это по сути создать «ленивый селектор», как описано в документации (https://ngxs.gitbook.io/ngxs/concepts/select#lazy-selectors)
Как это:
export class ChildRecordState {
@Selector()
static childRecords(state: ChildRecordModel) {
return (id: number) => state.Records.filter(r => r.parentId === id);
}
// ...
}
(Полный пример без внуков здесь: https://stackblitz.com/edit/angular-ngxs-parent-child).
Я вижу, что есть Sub State, к которому можно получить доступ, и я могу создать селектор, используя его в родительском элементе, но на самом деле это не сильно улучшает результат. Вопрос в том, есть ли лучший способ доступа к дочерним элементам родительского объекта, чем показано в примере / stackblitz?