Контекст:
Я работаю над проектом React Native, используя стартовый проект RNFirebase . У меня есть коллекция users
в Firestone. Каждый документ в этой коллекции имеет поле username
. Я хочу отобразить имя пользователя, вошедшего в систему, на главном экране моего проекта. До сих пор я выяснил, как запросить username
в users
, используя этот пример из официальных документов Firebase .
Первый выпуск :
В теле запроса я могу (по какой-то непонятной причине) успешно alert()
значение username
, используя ссылку на нужный мне документ. Я хочу сохранить значение этого запроса в currentUsername
, а затем отобразить его, и эта часть не работает.
Второй выпуск :
После интеграции примера кода из документации Firebase мое приложение также падает после того, как я позвонил signOut()
. Ошибка TypeError: null is not an object (evaluating _reactNativeFirebase.default.auth().currentUser.uid)
. Если я удаляю код примера, signOut()
работает нормально.
...
import firebase from 'react-native-firebase';
...
export class Activity extends React.Component
{
constructor(props)
{
super(props);
this.componentDidMount = this.componentDidMount.bind(this);
this.handleLogout = this.handleLogout.bind(this);
this.state = { currentUser: null, errorMessage: null };
}
componentDidMount()
{
const { currentUser } = firebase.auth();
this.setState({ currentUser });
}
handleLogout()
{
firebase.auth().signOut()
.then(() => {
this.props.navigation.navigate('Login'); // This part fails as well
})
.catch(error => {
this.setState({ errorMessage: error.message });
});
}
render()
{
const { currentUser } = this.state;
const usersRef = firebase.firestore().collection('users').doc(firebase.auth().currentUser.uid);
let currentUsername = '';
usersRef.get().then(doc =>
{
if (doc.exists)
{
currentUsername = doc.data().username; // This value does not persist
currentUsername = (' ' + doc.data().username).slice(1); // I'm trying to deep copy it here, and that still fails
alert("Current username is: " + currentUsername); // This does work, however
}
else
{
alert("No such document!");
}
}).catch(error => {
alert("Error getting document:", error);
});
return (
<View style={styles.container}>
<Text>
Hi @{currentUser && currentUsername}! // Renders nothing
</Text>
<Button title="Logout" onPress={this.handleLogout} />
</View>
);
}
}