Как сделать вызов Aysnc в redux / reducer

У меня есть обработчик событий, который обрабатывает изменение состояния, например ввод данных пользователем, а также выполняет вызов API / async. Теперь я хочу использовать сокращение, чтобы справиться с этим.

Обработчик события:

  handleApiCall = (event) => {
    // const { arr, value } = this.state;
    if (event.keyCode === 13) {
      if (value && this.someobject) {
        const arrObj = {
          name: 'Name',
          message: this.state.value,
        };
        this.state.arr.push(arrObj);
        //makes api call
        this.someobject.send("/url/sub-url", {}, JSON.stringify(arrObj));
      }
    }
  } 

Моя попытка сделать то же самое в редукторе:

const CALL_API = 'CALL_API';

const initialState = {
  value: '',
  arr: [],
}

export default function chatWidget(state = initialState, action) {
  switch (action.type) {
    case CALL_API:
    if (action.payload === 13) {
        return {
          ...state,
          arr: [...state.arr, {name: 'Name', message: state.value}],
          value: '',
        }
    }
  }
 default:
      return state;
} 

Теперь это работает нормально, я вижу, что мой массив обновляется через мою отправку действия в компоненте при каждом обновлении значения. Но вопрос в том, где сделать этот вызов API:

this.someObject.send("/url/sub-url", {}, JSON.stringify(arr[something]));???? 
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Массив зависимостей в React
Массив зависимостей в React
Все о массиве Dependency и его связи с useEffect.
0
0
30
1

Ответы 1

Ваш редуктор должен быть чистой функцией (теперь побочные эффекты, такие как вызовы API).

На самом деле у вас есть 2 варианта:

1) используйте промежуточное программное обеспечение thunk. это хорошо описанный здесь

2) используйте редукс-сага, если вы хотите использовать генераторы

Это основы работы с redux, поэтому внимательно прочтите его.

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