NGXS - доступ к родительскому состоянию из дочернего состояния

У меня есть родительское состояние, состоящее из дочернего состояния:

 @State({
     name: 'parent',
     default: { parentProp : 'foo' },
     children: [
        ChildState,
     ]
 }) class ParentState {}

И дочернее состояние:

 @State({
     name: 'child',
     default: { },
 }) class ChildState {}

Я хотел бы получить доступ к parentProp внутри ChildState, я попытался использовать метод общего состояния но он создает циклическую зависимость, поскольку ParentState импортирует ChildState и наоборот.

Я пропустил простое решение?


person Ostn    schedule 04.08.2018    source источник
comment
Вы смотрели суб-состояния? ngxs.gitbook.io/ngxs/advanced/sub-states   -  person Mackelito    schedule 31.08.2018


Ответы (2)


Простым решением было бы поместить их в один файл, чтобы избежать циклической ссылки.

При этом я хотел бы спросить, почему ребенок так заинтересован в родительском свойстве. Возможно, это свойство может перейти к дочернему элементу, или дочерний элемент может отреагировать на то же действие, которое родитель использует, чтобы установить это свойство для захвата своей собственной копии значения.

Если вы ищете способ создать селектор для двух состояний, вы можете создать селектор объединения (см. Соответствующий раздел здесь: https://ngxs.gitbook.io/ngxs/concepts/select).

person Mark Whitfeld    schedule 04.08.2018
comment
Как бы вы предложили, чтобы свойство переместилось вниз к дочернему элементу, помимо запуска другого @Action в дочернем элементе и копирования значения, как вы предлагаете? Есть другой способ? Я действительно хотел бы использовать здесь join @Selectors, но, как говорит OP, это невозможно из-за циклических ссылок. - person rivanov; 19.11.2018
comment
Также я только что понял, не приведет ли это копирование значений к нормализации хранилища? - person rivanov; 19.11.2018

У меня точно такие же потребности, как у автора. Причина, по которой дочерний элемент может быть заинтересован в родительском свойстве, довольно проста. Здесь вы в основном сосредотачиваетесь на выборе части, но в моем случае она нужна мне для сохранения чистых файлов с состоянием, в котором я бы хотел избежать беспорядка.

Это не мой случай, но соотносится с ним :). Допустим, у нас есть основное состояние с некоторыми свойствами и некоторыми дочерними состояниями, сохраняющими более сложную структуру данных.

И теперь происходит какое-то действие, которое устанавливает какое-то значение в основном состоянии, затем происходит другое, которое устанавливает что-то в дочернем состоянии, но я хочу установить его, например. в карте с ключом в качестве значения свойства из основного состояния.

Ничего особенного ... И такая возможность, наверное, очень поможет.

person PointOfEntry    schedule 17.03.2021