Ваша логика рендеринга должна учитывать асинхронный запрос к Firebase.Чтобы решить эту проблему, используйте свои компоненты state
, внеся следующие изменения в свой код:
getMyStory() { /* Remove arrow function */
const db = firebase.firestore();
db.settings({ timestampsInSnapshots: true});
db.collection('story').get().then((snapshot) => {
snapshot.docs.forEach(doc => {
let items = doc.data();
/* Make data suitable for rendering */
items = JSON.stringify(items);
/* Update the components state with query result */
this.setState({ items : items })
});
});
}
Затем добавьте componentDidMount()
к своему компоненту, а затем добавьте вызов к getMyStory()
вот так:
componentDidMount() {
/* Cause your component to request data from Firebase when
component first mounted */
this.getMyStory()
}
Наконец, обновите ваш метод рендеринга, чтобы использовать состояние, а не метод:
render () {
return (<p>{ this.state.items || 'Loading' }</p>);
}
Надеюсь, это поможет!