Реагируйте на собственный вызов asyn c, используя this.props внутри .then () - PullRequest
3 голосов
/ 27 апреля 2020

Здравствуйте, я пытаюсь выполнить реквизит входа в систему после того, как пользователь вошел в 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 function:

_login = async (user) => {
  this.props.screenProps.isLoggedIn();
  AsyncStorage.setItem('user', user.user.uid);
  AsyncStorage.setItem('loggedInStatus', 'loggedIn');
}

что мне делать?

Ответы [ 2 ]

4 голосов
/ 27 апреля 2020

Попробуйте использовать эту функцию:

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')
  }
}

Почему эти 2 привязки?

Это не сработало, потому что "this" отличается внутри топора ios. "this" внутри топора ios относится к объекту топора ios, а не к вашему компоненту реакции. Таким образом, вы можете решить эту проблему с .bind.

1 голос
/ 27 апреля 2020

Как сказал предыдущий ответ. this внутри обратного вызова привязан к вашему firebase контексту

Чтобы this был привязан к вашему классу, вы можете использовать функцию bind , которая будет связывать this внутри обратного вызова then к this, переданного в качестве аргумента функции bind, которая связана с вашим классом

Чтобы избежать привязки this к контексту firebase внутри then обратного вызова вы также можете использовать функцию стрелки

.then((user) => {
  this._login(user)
})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...