Как заменить массив в состоянии ngrx? - PullRequest
0 голосов
/ 20 января 2020

Я сделал вызов API, который возвращает массив объектов Book, который я пытаюсь поместить в свое состояние, заменив текущий массив результатов. Я попытался создать новый объект состояния, используя Objects.assign для создания нового массива результатов, и некоторые другие вещи, но кажется, что я не обновляю массив состояний или результатов должным образом, так как мои селекторы не обновляются. Я знаю, что мой редуктор определенно попал, хотя, поскольку у меня там был некоторый вход в систему ранее.

Вот объект состояния:

export interface BooksState {
  books: Book[];
  results: Book[];
}

вот мой текущий редуктор:

const booksReducer = createReducer(
  initialState,
  on(BooksActions.SearchBookSuccess, (state, { payload }) => {
    const newState = {
      ...state,
      results: payload
    };
    return newState;
  })
);

export function reducer(state: BooksState | undefined, action: Action) {
  return booksReducer(state, action);
}

здесь я отправляю действие:

searchBooks$ = createEffect(() =>
    this.actions$.pipe(
      ofType(BookActions.SearchBookRequested),
      Rx.mergeMap(action =>
        this.bookService.search(action.payload).pipe(
          Rx.map(results =>
            BookActions.SearchBookSuccess({ payload: results })
          ),
          Rx.catchError(() => BookActions.SearchBookFailure)
        )
      )
    )
  );

, и это мой селектор:

this.results$ = store.select(getResults);

С помощью селектора я также попытался создать функцию export const getResults = (state: BooksState) => state.results и выбрав его с помощью store.select также безуспешно.

Что мне не хватает?

...