Почему я получаю объект со свойством наблюдателя действия из селектора с использованием действующей операции withLatestFrom?

Значение «res» - это объект, который не извлекает данные, относящиеся к селектору, работает в других местах, но в результате получает этот объект. Почему это происходит?

      constructor(
      private serviceStore: Store<DataState>,
) {

  searchForLatest$ = createEffect(() =>
      this._actions.pipe(
          ofType<GetLatestRequestService>(GetLatestData),
          withLatestFrom(({ id }) => 
             this.serviceStore.select(getlatestData(id)),
          mergeMap(res => {
              


 actionsObserver: { 
      closed: false,
      hasError: false,
      isStopped: false,
      observers: [SkipSubscriber],
      thrownError: null,
      _isScalar: false,
}
operator: {
      compare: undefined
      keySelector: undefined
}
reducerManager: {
      closed: false
      dispatcher: DevtoolsDispatcher {_isScalar: false, observers: Array(1), closed: false, 
      isStopped: false, hasError: false, …}
      hasError: false
      initialState: undefined
      isStopped: false
      observers: [MapSubscriber]
      reducerFactory: (reducers, initialState) => {…}
      reducers: {uiContext: ƒ, parties: ƒ, user: ƒ, organizationsDetail: ƒ, activeRoute: ƒ, …}
      thrownError: null
      _isScalar: false
      _value: (state, action) =>
}
Source: {
     actionsObserver: ActionsSubject {_isScalar: false, observers: Array(1), closed: false, 
     isStopped: false, hasError: false, …}
     operator: MapOperator {thisArg: undefined, project: ƒ}
     reducerManager: ReducerManager {_isScalar: false, observers: Array(1), closed: false, 
     isStopped: false, hasError: false, …}
     source: Store {_isScalar: false, actionsObserver: ActionsSubject, reducerManager: 
     ReducerManager, source: Observable}
     _isScalar: false

} _isScalar: false

1 ответ

Эффекты в v13 обновили подход к получению последних данных из селектора, мне нужно использовать оператор concatLatestFrom для получения данных.

      @Injectable()
export class CollectionEffects {
  addBookToCollectionSuccess$ = createEffect(
    () =>
      this.actions$.pipe(
        ofType(CollectionApiActions.addBookSuccess),
        concatLatestFrom(action => this.store.select(fromBooks.getCollectionBookIds)),
        tap(([action, bookCollection]) => {
          if (bookCollection.length === 1) {
            window.alert('Congrats on adding your first book!');
          } else {
            window.alert('You have added book number ' + bookCollection.length);
          }
        })
      ),
    { dispatch: false }
   );

  constructor(
    private actions$: Actions,
    private store: Store<fromBooks.State>
  ) {}
}

Примечание. Из соображений производительности используйте оператор выравнивания, такой как concatLatestFrom, чтобы предотвратить срабатывание селектора до тех пор, пока не будет отправлено правильное действие.

Другие вопросы по тегам