Je développe une application native React. Lorsque j'essaye d'exécuter le code suivant, j'ai une erreur. Mais setStates sur d'autres parties du même fichier fonctionne correctement.
undefined n'est pas un function (évaluant'this.setState ({firebaseMessages: "Wrong mot de passe "})
.catch(function(error) { var errorCode = error.code; var errorMessage = error.message; if (errorCode === "auth/wrong-password") { //alert("Wrong password."); this.setState({ firebaseMessages: "Wrong password" }); this.setState({ isModalVisibleFirebase: true }); this.setState({ loading: false }) return; } else { alert(errorMessage); return; } console.log(error); }
3 Réponses :
Vous devrez probablement lier votre fonction de rappel, essayez ceci:
catch((error) => { // change this line var errorCode = error.code; var errorMessage = error.message; if (errorCode === "auth/wrong-password") { //alert("Wrong password."); this.setState({ firebaseMessages: "Wrong password" }); this.setState({ isModalVisibleFirebase: true }); this.setState({ loading: false }) return; } else { alert(errorMessage); return; } console.log(error); })
Vous pouvez également utiliser une fonction de flèche ES6, comme ceci:
catch(function(error) { var errorCode = error.code; var errorMessage = error.message; if (errorCode === "auth/wrong-password") { //alert("Wrong password."); this.setState({ firebaseMessages: "Wrong password" }); this.setState({ isModalVisibleFirebase: true }); this.setState({ loading: false }) return; } else { alert(errorMessage); return; } console.log(error); }.bind(this)) // change this line
si vous utilisez le mode de fonctionnement ES5, définissez votre cette
portée changera, utilisez la syntaxe des flèches pour conserver cette
portée.
Alors maintenant, vous devriez faire .catch ((error) => {
au lieu de .catch (function (error) {
.catch((error) => { var errorCode = error.code; var errorMessage = error.message; if (errorCode === "auth/wrong-password") { //alert("Wrong password."); this.setState({ firebaseMessages: "Wrong password" }); this.setState({ isModalVisibleFirebase: true }); this.setState({ loading: false }) return; } else { alert(errorMessage); return; } console.log(error); }
La solution simple est d'assigner this
à une variable, puis d'utiliser cette variable pour appeler setState
.
_this.setState({ firebaseMessages: "Wrong password" });
puis utilisez comme ceci,
const _this = this; //write this before fetch method
avez-vous déclaré l'état
firebaseMessages
dans le constructeur?