J'ai une application qui fonctionne et j'essaie juste de régler l'état à loading: true
pendant que mon application fait un appel de soumission afin que je puisse afficher un écran de chargement. Parce que je veux m'assurer que je mets l'état avant en faisant l'appel de chargement, j'utilise un rappel. Cependant, je ne vois pas ma mise à jour de chargement avec le code ci-dessous:Le rappel setState ne fonctionne pas comme prévu
submitSecurityAnswer =() => {
const { submit, handleError, navigate } = this.props;
const { answer } = this.state;
this.setState({ loading: true },() => {
console.log('setState', this.state)
try {
submit({ answer, ...this.props }).then(({ errors, status }) => {
this.setState({ answer: '' });
if (status && status === 200) {
navigate();
} else if (status === 401) {
this.setState({ showError: true });
} else {
handleError(errors[0]);
}
});
} catch (err) {
console.log(err);
}
});
this.setState({ loading: false });
};
Quand je vérifie mon journal de la console, je vois que l'Etat n'a pas mis à jour et le chargement est toujours faux.
Qu'est-ce qui me manque ici? Cela parce que vous définissez loading
à false
avant que l'opération asynchrone ne soit terminée.
Si je comprends bien ce que vous essayez de faire correctement votre 'this.setState ({chargement: false})' doit être juste avant ou après 'navigate();' – bennygenel
en fait si vous changez 'this.setState ({answer: ''});' en 'this.setState ({answer: '', loading: false}); 'cela devrait fonctionner aussi – bennygenel
oui, j'essaye de' this.setState ({loading: false}) 'avant le' submit() ' – Turnipdabeets