Ngrx 6.1.0 - выбор устарел - что такое новый синтаксис?

Следующий ngrx select устарел.

this.store.select(state => state.academy.academy).subscribe((academy) => {
    this.academy = academy;
});

Я нашел это в store.d.ts

@deprecated from 6.1.0. Use the pipeable 'select' operator instead.

Итак... какой правильный синтаксис?

я попробую

this.store.pipe(select(state => state.academy.academy).subscribe((academy) => {
    this.academy = academy;
}))

Ошибка: не удается найти имя "select". Вы имели в виду "onselect"?

Ответ 1

import {Component, OnInit} from '@angular/core';
import {Store, select} from '@ngrx/store';
import {AppState} from '../../../../../app.state';

@Component({
   selector: 'app-layout',
   templateUrl: './layout.component.html',
   styleUrls: ['./layout.component.scss']
})
export class PageLayoutComponent implements OnInit {

   academy;

   constructor(
      private store: Store<AppState>
   ) {
   }

   ngOnInit() {
      this.store.pipe(select((state: any) => state.academy.academy)).subscribe((academy) => {
         this.academy = academy;
      });
   }


}

Ответ 2

Как упоминал @Michalis, просто select из @ngrx/store.

Селекторы позволяют вам составить модель чтения для состояния вашего приложения. Что касается архитектурного шаблона CQRS, NgRx отделяет считываемую модель (селекторы) от модели записи (редукторы). Передовой метод состоит в том, чтобы объединить селекторы с операторами RxJS-протоколов.

Эта функция была добавлена в версии 5.0.0, и с тех пор this.store.select() устарел. Однако уведомление об этом добавляется в версии v6.1.0. Поскольку Store<T> сам расширяет Observable<T>, он возвращает наблюдаемый, который может быть легко подписан с помощью .subscribe() или может управляться/преобразовываться с использованием разных операторов исправлений.

RxJS представила встраиваемые операторы и .pipe() в версии 5.5. Существует также функция полезности труб, которая может использоваться для создания многоразовых трубопроводных операторов. В выпуске v5 с помощью оператора custom pipe() select оператор pipe(). Проверьте эту ссылку или базовый пример (игнорировать пустое состояние), ниже, чтобы узнать больше.

import { select } from '@ngrx/store';
import { pipe } from 'rxjs';
import { filter } from 'rxjs/operators';

export const selectFilteredState = pipe(
  select('sliceOfState'),
  filter(state => state !== undefined)
);

store.pipe(selectFilteredState ).subscribe(/* .. */);