我正在开发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);
}
答案 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" });