Невозможно присвоить значение переменной с помощью запроса Cloud Firestore в React Native Firebase Invertase - PullRequest
1 голос
/ 11 июля 2019

Контекст:

Я работаю над проектом 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>
        );
    }
}
...