undefinend不是函数this.setState反应本机

时间:2019-06-25 05:30:49

标签: android react-native undefined setstate

我正在开发React本机应用程序。当我尝试执行以下代码时,出现错误。但是同一文件其他部分的setStates可以正常工作。

  

未定义不是   function(evaluating'this.setState({firebaseMessages:“ Wrong   密码”})

 .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 个答案:

答案 0 :(得分:1)

您可能需要绑定回调函数,请尝试以下操作:

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

或者,您可以使用ES6箭头功能,如下所示:

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

答案 1 :(得分:1)

如果您使用ES5功能定义您的this范围,请使用箭头语法保留this范围。

所以现在您应该.catch((error) => {而不是.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);
  }

答案 2 :(得分:0)

一种简单的解决方案是,将this分配给某个变量,然后使用该变量来调用setState

const _this = this; //write this before fetch method

然后像这样使用

_this.setState({ firebaseMessages: "Wrong password" });