Состояние A использует B, а состояние B использует A - PullRequest
0 голосов
/ 09 марта 2020

Я создаю настолько сложное приложение, что мне нужно разделить состояние на два меньших. К сожалению, некоторые селекторы в состоянии A должны читать некоторые поля из состояния B, а некоторые селекторы в состоянии B должны читать некоторые поля из состояния A.

Например - Состояние A:

@Injectable({ providedIn: "root" })
@State<{x: number;}>({
  name: "stateA",
  defaults: {x: 0}
})
export class StateA {
  @Selector([StateB])
  public static someSelector(stateA, stateB) {
    // do stuff...
  }
}

и Состояние B:

@Injectable({ providedIn: "root" })
@State<{y: number;}>({
  name: "stateB",
  defaults: {y: 0}
})
export class StateB {
  @Selector([StateA])
  public static someSelector(stateB, stateA) {
    // do stuff...
  }
}

Когда я пытаюсь реализовать это, я получаю ошибку: Uncaught ReferenceError: Cannot access 'StateA' before initialization

ошибка исчезает, как только : state A uses B and B doesn't use A или state B uses A and A doesn't use B

Как это исправить?

1 Ответ

1 голос
/ 10 марта 2020

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

Для сценария, который вы описываете, вы можете рассмотреть возможность использования Meta Selector , который вы определяете отдельно от каждого класса состояний , Это позволит вам объединить состояния вместе, чтобы сформировать селектор, который dr aws из свойств обоих состояний.

export class CombinedSelectors {
  @Selector([StateA, StateB])
  static combineThem(stateA, stateB) {
    // do stuff e.g.:
    return stateA.x + stateB.y;
  }
}
...