你好,我试图在用户登录Firebase后执行登录道具,使用then()我拥有我可以使用的用户变量,但是我不能在此处使用_login函数:
onClickLogin = async () => {
if (this.state.email && this.state.password) {
firebase
.auth()
.signInWithEmailAndPassword(this.state.email, this.state.password)
.then(function (user) {
this._login(user)
})
.catch(function(error) {
if (error) {
alert(error)
}
})
} else {
alert('Veuillez remplir tous les champs')
}
}
_login函数:
_login = async (user) => {
this.props.screenProps.isLoggedIn();
AsyncStorage.setItem('user', user.user.uid);
AsyncStorage.setItem('loggedInStatus', 'loggedIn');
}
我该怎么办?
答案 0 :(得分:3)
尝试使用此功能:
onClickLogin = async () => {
if (this.state.email && this.state.password) {
firebase
.auth()
.signInWithEmailAndPassword(this.state.email, this.state.password)
.then(function (user) {
this._login(user)
}.bind(this)) // bind here
.catch(function(error) {
if (error) {
alert(error)
}
}.bind(this)); // bind here
} else {
alert('Veuillez remplir tous les champs')
}
}
为什么这两个绑定?
这不起作用,因为"this"
在axios内部是不同的。 axios内部的"this"
是指axios对象,而不是您的react组件。因此,您可以使用.bind
解决此问题。
答案 1 :(得分:0)
如先前的回答所述。回调中的this
绑定到您的firebase
上下文
为了将this
绑定到您的类,您可以使用bind function,它将this
回调中的then
绑定到作为{ this
函数的参数,该参数绑定到您的类
要避免将bind
绑定到this
回调内的firebase
上下文中,您还可以使用箭头函数
then