Итак, вы делаете асинхронный API-запрос к Firebase.
Чтобы использовать logoUrl
в ваших компонентных методах, сначала вы должны сохранить его в состоянии, как только его значение будет возвращено Firabase.
Ваш поток должен быть:
- Запустить запрос API для получения логотипа.
- Когда ответ будет возвращен, вы должны сохранить его в состоянии компонента.
- Когда он находится в состоянии, вы можете получить к нему доступ в своем компоненте.
Имейте в виду, что начальное значение logoUrl равно null
(или любому другому значению, которое вы задали в конструкторе), пока логотип выбирается из API. Когда это null
, вы можете показать загрузочное сообщение.
Примерно так:
class App extends React.Component {
constructor(props) {
super(props)
this.state = {
logoUrl: null
}
}
getLogo() {
const userId = fire.auth().currentUser.uid
fire.database().ref('/clients/' + userId).once('value')
.then(function(snapshot) {
let companyID = (snapshot.val().companyID) || 'Anonymous'
fire.database().ref('/company/' + companyID)
.once('value')
.then(function(snapshot) {
const logoUrl = snapshot.val().logo
this.setState({
logoUrl
})
})
})
}
componentDidMount() {
this.getLogo()
}
render() {
return this.state.logoUrl ? <img src={this.state.logoUrl} /> : <div>Loading ...</div>
}
}