Ошибка в React Redux: необработанное отклонение (ошибка): действия должны быть простыми объектами - PullRequest
0 голосов
/ 09 мая 2019

Я получаю следующую ошибку при совершении вызова извлечения и отправке некоторых значений через функцию connect в программе redux в хранилище.

Unhandled Rejection (Error): Actions must be plain objects. Use custom middleware for async actions.

Я видел пару вопросов об этой ошибке, но ни один из них не был достаточно близок к моему делу и моей способности понять проблему. Я читал об использовании "thunk" в некоторых случаях, но в других случаях люди называли эту ошибку чем-то, что просто не настроено прямо в приставке, поэтому я не уверен, что именно здесь происходит.

Это вызов выборки, сделанный в классе Chat.js:

async sendAtStart() {
 var msg;
    await fetch(
      '*********',
      {
        method: 'POST',
        headers: {
          'Content-Type': 'application/x-www-form-urlencoded',

        },
        body: JSON.stringify({ inputText: 'hello' })
      }
    )
      .then(r => r.json())
      .then(r => {
        msg = r.msg;


      });

    this.props.addMessage(msg);
  }

Это функция подключения в конце Chat.js:

const mapStateToProps = state => ({
  ...state
});
const mapDispatchToProps = dispatch => ({
  addMessage: () => dispatch(addMessage)
});

export default connect(
  mapStateToProps,
  mapDispatchToProps
)(Chat);

Это магазин:

import { createStore } from 'redux';
import MessageReducer from './reducers/MessageReducer';
function configureStore(state = { text: '', key: '' }) {
  return createStore(MessageReducer, state);
}
export default configureStore;

Действия:

export function addMessage(text) {
  return { type: 'addMessage', text };
}

Переходники:

export default (state, action) => {
  switch (action.type) {
    case 'addMessage':
      return {
        text: action.text
      };
    default:
      return state;
  }
};

Где именно проблема в моем случае?

Ответы [ 2 ]

2 голосов
/ 09 мая 2019
const mapDispatchToProps = dispatch => ({
  addMessage: () => dispatch(addMessage)
});

Здесь вы забыли установить параметр в псевдониме, он должен быть:

 const mapDispatchToProps = dispatch => ({
   addMessage: (msg) => dispatch(addMessage(msg))
 });
0 голосов
/ 09 мая 2019

Вы не можете легко выполнять асинхронные действия без промежуточного программного обеспечения, такого как redux-saga или redux-thunk.я предлагаю использовать redux-saga для асинхронных действий, таких как fetch.

...