1
votes

undefinend n'est pas une fonction this.setState react native

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);
  }


1 commentaires

avez-vous déclaré l'état firebaseMessages dans le constructeur?


3 Réponses :


1
votes

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


0 commentaires

1
votes

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);
  }


0 commentaires

1
votes

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


0 commentaires