Использование конструктора для выбора в магазине и ngOnInit для отправки из магазина

Мой вопрос связан с отправкой и выбором из магазина ngrx.

Давайте посмотрим на следующий код из официального примера приложения:

export class CollectionPageComponent implements OnInit {
  books$: Observable<Book[]>;

  constructor(private store: Store<fromBooks.State>) {
    this.books$ = store.select(fromBooks.getBookCollection);
  }

  ngOnInit() {
    this.store.dispatch(new collection.Load());
  }
}

Я хотел бы понять, что мотивировало выбор отправкиngOnInit и выбора изconstructor .

Может ли кто-нибудь объяснить это?

PS Кстати, выше приведен пример кода из примера приложения ngrx, который можно найти здесь: https://github.com/ngrx/platform/blob/master/example-app/app/books/containers/collection-page .ts

ngrx,ngrx-store,ngrx-store-4.0,

7

Ответов: 2


1

Конструктор выполняется, когда экземпляр класса создается и обеспечивает правильную инициализацию класса? поля. Вот где Angular разрешает провайдеры, которые вы можете передать в качестве аргументов в свой конструктор.

Ключ жизненного цикла ngOnInit вызывается после того, как свойства, связанные с данными, были проверены в первый раз (входы и выходы компонента). Для более подробного объяснения см. Этот вопрос .

Мотивация выбора из ngrx-хранилища в конструкторе и отправка из ngOnInit, насколько я понимаю, заключается в том, что выбор является частью инициализации вашего класса компонента. Поскольку this.books$это Observable, имеет смысл инициализировать его в конструкторе, чтобы он был готов к использованию сразу после создания. Предполагая, что bookCollection.Load()испускает значение для this.books$вас, вы хотите this.books$быть наблюдаемым из этих книг до того, как испустят возможное значение.

Поскольку вы хотите, чтобы те значения, которые испускались, имели this.books$смысл отправить действие в ngOnInit. Таким образом, вы можете определить, что this.books$инициализировано.

Этот ответ на аналогичный вопрос также может помочь.


-1

Главная причина, по моему мнению, заключается в разделении проблем. Конструктор - это место, где вы определяете все зависимости. Таким образом, в этом случае вы получаете магазин и выбираете его кусочек.

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

Подумайте о классе с большим количеством зависимостей и множеством действий. Это помогает держать вещи раздельными. Каждый, кто прочитает класс, всегда может посмотреть на конструктор, чтобы узнать, что такое зависимости, и не запутывается ни с какой другой логикой.

ngrx, ngrx-магазин, ngrx-магазин-4,0,
Похожие вопросы
Яндекс.Метрика