Прямо сейчас у меня есть приложение реакции, использующее редукс. Я создал компонент, который работает как форма для создания клиентов. Как это:
import { createCustomer } from "../../actions";
class CustomerCreate extends React.Component {
state = {
submitting: false
}
componentWillReceiveProps(nextProps) {
this.setState({ submitting: false });
}
submitData = (data) => {
this.setState({ submitting: true });
this.props.createCustomer(data);
};
render() {
return (
<React.Fragment>
{this.state.submitting ? <LoadingScreen /> : null}
{this.props.error ? <ErrorMessage message={this.props.error}/> : null}
<FormContainer
...
/>
</React.Fragment>
);
}
}
const mapStateToProps = ({ customerData }) => {
return {
error: customerData.error
};
};
export default connect(mapStateToProps, { createCustomer })(
CustomerCreate
);
Это работает "отлично". В основном componentWillReceiveProps будет вызываться каждый раз, когда что-то происходит (ошибка, хорошо), поэтому я буду знать, когда снимать загрузочный экран. Проблема заключается в том, что componentWillReceiveProps выдает предупреждение (говорящее, что его не следует использовать), и на основе избыточной документации это помечается как анти-шаблон.
Я знаю, что одно решение может быть не используя редукса здесь. Изменение submitData с помощью вызова axions и размещение setState там. Но я использовал его так, потому что одно из сообщений об ошибке может быть: SESSION EXPIRED или INVALID JWT TOKEN , поэтому мне нужно повторно отправить веб-страницу на экран входа в систему.
Другой способ, который я могу себе представить, - это вызов в действии диспетчеризации для установки состояния isSubmitting. Примерно так:
export const createCustomer = (data) => {
/* IS THIS VALID? */
dispatch({ type: CUSTOMER_SUBMITTING });
return async function (dispatch) {
try {
const response = await services.post("/api/customer", data, buildHeader());
dispatch({ type: CUSTOMER_CREATED, payload: response.data });
} catch (err) {
dispatch({ type: CUSTOMER_ERROR, payload: err });
}
};
};
И вместо использования state.isSubmitting я буду использовать props.isSubmitting . Но я не уверен, что вызов двух диспатов, как этот, является действительным / правильным.
Итак, мой вопрос: Как я могу реализовать состояние / реквизиты, которые установлены в true, когда я отправляю и устанавливается на false, когда вызов ax ios завершен (из-за какой-то ошибки или просто ОК).