Redux Thunk: Действие должно быть простым объектом - PullRequest
0 голосов
/ 08 мая 2018

Я просмотрел большинство сообщений здесь о проблемах такого рода, но мне все еще не повезло. Вот как выглядит моё действие, это тот же пример, что и в файле readme с избыточным количеством npm:

const INCREMENT_COUNTER = 'INCREMENT_COUNTER';

function increment() {
  return {
    type: INCREMENT_COUNTER
  };
}

function incrementAsync() {
  return dispatch => {
    setTimeout(() => {
      // Yay! Can invoke sync or async actions with `dispatch`
      dispatch(increment());
    }, 1000);
  };
}

Магазин настроен как показано ниже и передан провайдеру:

export default createStore(
  rootReducer,
  applyMiddleware(thunk)
);

<Provider store={store}>

Также пробовал использовать compose:

export default compose(
  applyMiddleware(thunk)
)(createStore)(combineReducers({ ... }));

IncrementAsync отправляется из подключенного компонента, как показано ниже:

this.props.dispatch(incrementAsync);

Я все еще получаю Uncaught Error: Actions must be plain objects. Use custom middleware for async actions.

Версии NPM:

"react": "^16.3.2", 
"react-dom": "^16.3.2", 
"react-redux": "^5.0.7",
"react-router-dom": "^4.2.2", 
"redux": "^4.0.0", 
"redux-thunk": "^2.2.0"

Есть что-то, что я не правильно настраиваю?

Ответы [ 2 ]

0 голосов
/ 08 мая 2018

На компоненте разъема

this.props.dispatch(incrementAsync)

заменить на

this.props.incrementAsync();

и функция bind incrementAsync в соединении, как

connnect(null, { incrementAsync  }) (Component)
0 голосов
/ 08 мая 2018

должно быть this.props.dispatch(incrementAsync()); вместо this.props.dispatch(incrementAsync);

...