У меня проблема с пониманием, почему в компоненте на основе класса и функциональном компоненте одни и те же шаги дают разные результаты. Ниже у меня есть пример, демонстрирующий это различие.
class Test extends Component {
handleSubmit = e => {
e.preventDefault();
this.props.form.validateFields(async (err, values) => {
await this.props.saveUserDetailsAction(values);
const { error } = this.props; // expected modified prop
if (!error.status) {
this.props.router.push("/route");
}
});
};
}
const mapStateToProps = ({ app }) => ({
error: app.error
});
const mapDispatchToProps = {
saveUserDetailsAction,
};
export default compose(
withRouter,
connect(
mapStateToProps,
mapDispatchToProps
)
)(Test);
Текущая ошибка внутри компонента класса отражает изменения в хранилище redux после того, как asyn c function saveUserDetailsAction завершила , в этом случае отправка действия в случае сбоя запроса.
Доступ к параметрам ошибок после функции saveUserDetailsAction показывает обновленное свойство.
Тот же код, написанный как функциональный компонент не дает такого же результата. Доступ к опоре ошибки после завершения функции saveUserDetailsAction еще не отражает изменения в хранилище.
const Test = (props) => {
const handleSubmit = e => {
e.preventDefault();
props.form.validateFields(async (err, values) => {
await props.saveUserDetailsAction(values);
const { error } = props; // unchanged prop when accessed here
if (!error.status) {
props.router.push("/route");
}
});
};
}
const mapStateToProps = ({ app }) => ({
error: app.error
});
const mapDispatchToProps = {
saveUserDetailsAction,
};
export default compose(
withRouter,
connect(
mapStateToProps,
mapDispatchToProps
)
)(Test);