currentUser отображается неопределенным, но определяется позже. Это работает в другом компоненте, но не указан c один, и я не уверен - PullRequest
0 голосов
/ 24 марта 2020

Я пытаюсь получить информацию о текущем пользователе из базы данных. Однако по какой-то странной причине он говорит, что currentUser не определен, но когда я отлаживаю, он определяется после вызова функции. Есть идеи, что может быть решением?

setResults(){
    const user = (this.props.firebase.auth.currentUser) ? this.props.firebase.auth.currentUser.uid : null ;
    if(user){
    this.props.firebase.result(this.props.firebase.auth.currentUser.uid).on('value', snapshot => {
      const resultObj = snapshot.val();
      if(resultObj) {
        const resultList = Object.keys(resultObj).map(key => ({
          ...resultObj[key],
        }));
        this.setState({
          result: resultList,
        loading: false,
        });
      }else{
        this.setState({ results: null, loading: false});
      }
    })
  }
}

  componentDidMount() {
    this.setState({ loading: true});
    this.setResults();
  }

1 Ответ

1 голос
/ 24 марта 2020

firebase.auth.currentUser всегда будет неопределенным в первый момент, когда код запускается при загрузке веб-страницы. Если пользователь действительно вошел в систему, через некоторое время он будет заполнен идентификационной информацией этого пользователя.

Что вам нужно сделать, это использовать наблюдатель состояния авторизации для установки обратного вызова, когда состояние входа пользователя известно. Ваш код должен использовать этот обратный вызов, чтобы определить, когда объект пользователя известен, и когда начинать рендеринг контента на основе данных этого пользователя.

firebase.auth.onAuthStateChanged(function(user) {
  if (user) {
    // User is signed in.
    var displayName = user.displayName;
    var email = user.email;
    var emailVerified = user.emailVerified;
    var photoURL = user.photoURL;
    var isAnonymous = user.isAnonymous;
    var uid = user.uid;
    var providerData = user.providerData;
    // ...
  } else {
    // User is signed out.
    // ...
  }
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...