uroot
@uroot

Ошибка «Actions must be plain objects. Use custom middleware for async actions». Как решить?

Есть умный компонент:
function MethodWrapper(props) {
  const API_METHOD = [
      ...
  ]

  function submitHandler(event) {
    event.preventDefault()

    if (!props.method && !props.url) {
      showAlert("Название поста не может быть пустым")
      console.log(props)
    }
  }

  return (
    <form onSubmit={submitHandler}>
      <Input />
      <div className={style.methodWrapper}>
        <Methods isActive={props.method} methodList={API_METHOD}/>
      </div>
    </form>
  )
}

const mapDispatchToProps = {
  showAlert, getURL, getMethod
}

const mapStateToProps = state => ({
  alert : state.alert,
  url : state.url,
  method : state.method
})

export default connect(mapStateToProps, mapDispatchToProps)(MethodWrapper)


При клике на Сабмит, я вижу ошибку Error: Actions must be plain objects. Use custom middleware for async actions.. Жалуется на props.showAlert("Название поста не может быть пустым"). showAlert - это экшин, который принимает текст и пишет в стор. Как избавиться от ошибки?

Экшин showAlert:
export function showAlert(text) {
  return dispatch => {
    dispatch({
      type: SHOW_ALERT,
      payload: text
    })
  }
}


rootReducer:
import {HIDE_ALERT, SHOW_ALERT, REQUES_METHOD, GET_URL} from "./type";

export const initialState = {
  alert : null,
  url : null,
  method : null
}

export const rootReducer = ( state = initialState, action) => {
  switch (action.type) {
    ...
    case SHOW_ALERT:
      return {...state, alert : action.payload}
    ...
    default : return state
  }
}
  • Вопрос задан
  • 58 просмотров
Решения вопроса 1
E1ON
@E1ON
web, gamedev, anime, science
Экшен должен возвращать обьект
export const showAlert = text => ({
   type: SHOW_ALERT,
   payload: text
});
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@Devilz_1
Ознакомьтесь с тем, как нужно правильно коннектиться со стором тутачки

Обратите внимание на mapDispatchToProps.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы