错误消息后更新状态 - Firebase - React Native
2020-04-04
145
我是 React 新手,在收到注册错误消息后,我尝试更新页面中的值。 我从一个空值开始,一旦收到新值,我就想将其显示在屏幕上。 当我尝试更新状态时,它给了我一个错误
TypeError: undefined is not an object (evaluating 'this.setState').
仅当我在 catch 中添加
this.setState({ error: errorMessage})
时才会发生这种情况。
这是代码。
export default class Signup extends React.Component {
constructor(props) {
super(props);
this.state = {
email: '',
password: '',
error: ''
};
}
signUpUser = (email, password) => {
firebase.auth().createUserWithEmailAndPassword(email, password)
.then(function (user) {
console.log("Created new user " + user.user.providerData[0].uid)
})
.catch(function (error) {
let errorCode = error.code;
let errorMessage = error.message;
console.log(errorCode)
console.log(errorMessage)
this.setState({error: errorMessage})
})
}
render() {
return(
<View style={styles.container}>
<Text>{this.state.error}</Text>
<TextInput
style={styles.forms}
onChangeText={email => this.setState({ email })}
placeholder = "email"
/>
<TextInput
style={styles.forms}
onChangeText={password => this.setState({ password })}
placeholder = "password"
/>
<Button
title="SIGNUP"
onPress={() => this.signUpUser(this.state.email, this.state.password)}
/>
</View>
)
}
}
2个回答
在
function() { ... } 中,
this
的含义与该函数外部的含义不同。
最简单的解决方法是使用
=>
符号来声明这些函数,就像您在其他地方所做的那样:
firebase.auth().createUserWithEmailAndPassword(email, password)
.then((user) => {
console.log("Created new user " + user.user.providerData[0].uid)
})
.catch((error) => {
let errorCode = error.code;
let errorMessage = error.message;
console.log(errorCode)
console.log(errorMessage)
this.setState({error: errorMessage})
})
另请参阅:
Frank van Puffelen
2020-04-04
使用箭头函数。
将您的代码更改为我的代码。
signUpUser = (email, password) => {
firebase.auth().createUserWithEmailAndPassword(email, password)
.then(user => {
console.log("Created new user " + user.user.providerData[0].uid)
})
.catch(error => {
let errorCode = error.code;
let errorMessage = error.message;
console.log(errorCode)
console.log(errorMessage)
this.setState({error: errorMessage})
})
>
Tarun Bhardwaj
2020-04-04