undefinend это не функция this.setState реагирует на натив - PullRequest
0 голосов
/ 25 июня 2019

Я занимаюсь разработкой собственного приложения.Когда я пытаюсь выполнить следующий код, я получил ошибку.Но setStates для других частей того же файла работает нормально.

undefined не является функцией (оценивающим 'this.setState ({firebaseMessages: "Wrong password"})

 .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 ]

1 голос
/ 25 июня 2019

Если вы используете способ функции 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);
  }
1 голос
/ 25 июня 2019

Скорее всего, вам необходимо привязать функцию обратного вызова, попробуйте это:

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);
})
0 голосов
/ 25 июня 2019

Простое решение состоит в том, чтобы присвоить this какой-либо переменной, а затем использовать эту переменную для вызова setState.

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

и затем используйте вот так,

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