Итерация редукторов ngrx8 - PullRequest
       74

Итерация редукторов ngrx8

0 голосов
/ 21 сентября 2019

Интерфейс:

export interface IClient extends Array<IClient> {
  client_name: string
}

Действия:

export const addClientSuccess = createAction(
  '[CLIENT] ADD_CLIENT_COMPLETE',
  props<{ client_name: IClient }>()
);

Редукторы:

export interface ClientState {
    client_name: IClient[]
}

export const clientInitialState: ClientState = {
    client_name: []
}

export const clientReducer = createReducer(
clientInitialState,
on(ClientActionTypes.addClientSuccess,(state, {client_name}) => ({
  ...state,
  client_name: [...client_name]
})

))

Эффекты:

addClient = createEffect(() => {
    return this.actions.pipe(
      ofType(ClientActionTypes.addClient),
      switchMap(({ client }) => {
        return this.clientService.addClient(client).pipe(
          map((res) => ClientActionTypes.addClientSuccess(res)),
          catchError(error => {
            return of(ClientActionTypes.addClientFailure({ error }))
          })
        );
      })
    );
  });

С помощью приведенного выше кода я пытаюсь добавить массивы к client_name, но вводимое мной значение разделяется на несколько значений внутри массива, я прикрепил хранилище избыточных данных о том, как оно повторяется.

enter image description here

Например, если у меня есть тест и тестирование, оно должно вывести ['test', "testing"]

1 Ответ

1 голос
/ 21 сентября 2019

вы делаете это неправильно.

  1. ваш интерфейс не должен расширяться Array<IClient>.это простая строка.

    export interface IClient { client_name: string; }

  2. ваше государство должно содержать значимые имена: client_name**s**: IClient[]

    export interface ClientState { client_names: IClient[] }

    export const clientInitialState: ClientState = { client_names: [] }

  3. Ваш редуктор должен быть a.настроен правильно, чтобы иметь тип безопасности.б.Ваш массив client_name должен содержать предыдущие клиенты, инициализированные перед добавлением нового клиента.используйте оператор распространения.

    export const clientReducer = createReducer( clientInitialState, on(ClientActionTypes.addClientSuccess,(state, action) => ({ ...state, client_names: [...state.client_names, action.client_name] })

  4. ваш эффект также должен быть настроен правильно:

    addClient$ = createEffect(() => { return this.actions.pipe( ofType(ClientActionTypes.addClient), switchMap((action) => { return this.clientService.addClient(action.client_name).pipe( map((res) => ClientActionTypes.addClientSuccess({ client_name: res})), catchError(error => { return of(ClientActionTypes.addClientFailure({ error })) }) ); }) ); });

Я не тестировал этот код, поэтому используйте ваш intellisense для исправления опечаток, если таковые имеются.

  • извините за code вместо форматирования кодовых блоков, SO 4 пробелы не 'по какой-то причине работает неправильно.
...