У меня есть реактивный проект, который использует redux-thunk. Я создал действие, которое поразит конечную точку, а затем установит хранилище для полученных данных. В настоящее время я использую .then, но когда я вызываю действие в componentdidmount, данных там нет. Компонент рендерится до того, как данные станут доступны. Чтобы это исправить, я решил превратить свое действие в асинхронное действие c, а затем ждать в моем компоненте didmount. Проблема в том, что как только я добавляю asyn c в свое действие, я получаю эту ошибку ....
Unhandled Rejection (Error): Actions must be plain objects. Use custom middleware for async actions.
Вот мой код
Действие
export const getCasesSuccess = async (data) => {
return {
type: GET_ALL_CASES,
data
}
};
export const getAllCases = () => {
return (dispatch) => {
axios.get('https://corona.lmao.ninja/all')
.then(res => {
const cases = res.data
dispatch(getCasesSuccess(cases))
})
.catch(error => {
throw(error)
})
}
}
Компонент, где действие называется
import React from "react";
import { connect } from "react-redux";
import { getAllCases } from "../../store/actions/index";
import AllCases from '../../components/allcases/allCases';
class DataContainer extends React.Component {
constructor(props) {
super(props);
this.state = { }
}
componentDidMount = async () => {
await this.props.getAllCases()
}
render() {
return (
<div>
<AllCases allCases={this.props.allCases} />
</div>
);
}
}
const mapStateToProps = (state) => (
{
allCases: state.allCases
}
)
const mapDispatchToProps = dispatch => {
return {
getAllCases: () => dispatch(getAllCases()),
}
}
export default connect(mapStateToProps, mapDispatchToProps)(DataContainer);