У меня есть обработчик событий, который обрабатывает изменение состояния, например ввод данных пользователем, а также выполняет вызов 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]));????





Ваш редуктор должен быть чистой функцией (теперь побочные эффекты, такие как вызовы API).
На самом деле у вас есть 2 варианта:
1) используйте промежуточное программное обеспечение thunk. это хорошо описанный здесь
2) используйте редукс-сага, если вы хотите использовать генераторы
Это основы работы с redux, поэтому внимательно прочтите его.