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(/* .. */);