Angular и выполнение действий лаборатории NGXS: ExpressionChangedAfterItHasBeenCheckedError - PullRequest
0 голосов
/ 19 июня 2020

Вот мое репо: https://github.com/richarddavenport/why

Я не могу воспроизвести эту проблему на stackblitz.com или codeandbox.io.

Я получаю Ужасная ошибка:

ERROR Error: ExpressionChangedAfterItHasBeenCheckedError: Expression has changed after it was checked. Previous value: 'undefined'. Current value: '[object Object]'. It seems like the view has been created after its parent and its children have been dirty checked. Has it been created in a change detection hook?

Вид моего дочернего компонента:

<div>{{fetching$ | async | json}}</div>
<form [formGroup]="form" ngxsForm="state.form"></form>

Обработчик My Action в состоянии:

  @Action(FetchAction)
  fetchAction() {
    console.log('Dispatched --> fetch');

    return of(true).pipe(delay(15000));
  }

Если вы измените delay() на 0 вот так, ошибки нет:

  @Action(FetchAction)
  fetchAction() {
    console.log('Dispatched --> fetch');

    return of(true).pipe(delay(0));
  }

Если вы удалите форму из представления дочернего компонента, ошибки нет:

<div>{{fetching$ | async | json}}</div>

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

1 Ответ

0 голосов
/ 19 июня 2020

Установка для обнаружения изменений компонентов на ChangeDetectionStrategy.OnPush устраняет эту проблему.

...