在.then()中使用this.props反应本机调用异步函数

时间:2020-04-27 00:40:09

标签: firebase react-native asynchronous

你好,我试图在用户登录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');
}

我该怎么办?

2 个答案:

答案 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