Почему user
возвращается как undefined
(или даже null
)?
Вы знаете, что зарегистрированный пользователь , вы только что вошли в систему, черт, вы даже можете увидеть объект пользователя в инструментах Chrome Dev.
Тогда почему он по-прежнему возвращает undefined? На это есть прямой ответ.
Вы извлекаете пользовательский объект ДО того объекта готов к использованию.
Теперь это может произойти по нескольким причинам, но если вы будете следовать этим 2 «правилам», вы больше не увидите эту ошибку.
Правило № 1: уберите его из constructor()
Когда у вас есть что-то вроде:
constructor(){
this.userId = firebase.auth().currentUser.uid
}
Более половины времени загрузки страницы, конструктор будет пытаться получить пользователя до того, как пользователь будет готов, приложение блокирует его, потому что страница загружена не полностью, поэтому вы будете пытаться чтобы получить доступ к UID свойства, которого просто еще нет.
Когда вы полностью загрузите свою страницу, вы можете позвонить, чтобы получить currentUser.uid
Правило № 2: сделайте его наблюдаемым
Существует еще один подход, который вы можете использовать в предыдущем вызове Firebase: firebase.auth (). CurrentUser является синхронным. Вместо этого мы можем сделать его асинхронным, подписавшись на наблюдаемую аутентификацию.
/**
* When the App component mounts, we listen for any authentication
* state changes in Firebase.
* Once subscribed, the 'user' parameter will either be null
* (logged out) or an Object (logged in)
*/
componentDidMount() {
this.authSubscription = firebase.auth().onAuthStateChanged((user) => {
this.setState({
loading: false,
user,
});
});
}
/**
* Don't forget to stop listening for authentication state changes
* when the component unmounts.
*/
componentWillUnmount() {
this.authSubscription();
}
render() {
// The application is initialising
if (this.state.loading) return null;
// The user is an Object, so they're logged in
if (this.state.user) return <LoggedIn />;
// The user is null, so they're logged out
return <LoggedOut />;
}
}
Источник статьи: Почему Firebase возвращает undefined
при извлечении uid
?
Хорошее руководство для React Native будет здесь: Начало работы с аутентификацией Firebase на React Native
Поскольку ваш код не показывал много, я надеюсь, что вы обновите свой вопрос, чтобы показать больше кода, чтобы я мог просмотреть.