Я извлекаю данные из своей базы данных firestore, одно из полей каждого элемента базы данных - image, значение каждого из которых является URL-адресом изображения в моем хранилище firebase.
Что я хотел бы сделать, так это вытащить изображение прямо из хранилища как часть цикла, который извлекается из хранилища огня.
Я пытаюсь сделать это, поскольку, когда этот цикл отображает элементы, изображениям требуется несколько секунд, чтобы появиться на экране.
Посоветуйте, пожалуйста, есть ли альтернатива решения этой проблемы?
FirebaseData.js
onCollectionUpdate = (querySnapshot) => {
const data = [];
querySnapshot.forEach((doc) => {
const { title, image, url, description } = doc.data();
data.push({
key: doc.id,
doc, // DocumentSnapshot
title,
image,
description,
url
});
});
this.setState({
data,
loading: false
});
}
render() {
if (this.state.loading) {
return <Spinner />; //RETURN A LOADING ICON
}
return (
<List containerStyle = {styles.listStyle}>
<FlatList
data = {this.state.data}
renderItem = {({ item }) => <ChildList {...item} />}
/>
</List>
);
}
}
ChildList.js
export default class ChildListRow2 extends React.PureComponent {
render() {
return (
<ListItem
title = {
<View>
<Image source = {{ uri: this.props.image }} style = {styles.imageStyle} />
<Text style = {styles.titleTextStyle}>{this.props.title}</Text>
</View>
}
subtitle = {
<View>
<Text style = {styles.subTitleTextStyle}>{this.props.description}</Text>
</View>
}
hideChevron
onPress = {() => Linking.openURL(this.props.url)}
containerStyle = {styles.listItemStyle}
/>
);
}
}





Вы можете использовать свойства onLoadEnd и onLoadStart компонента Image, чтобы показать и скрыть остальные данные. Вы можете показывать счетчик загрузки до тех пор, пока файл не загрузится, а затем показать весь компонент, когда он закончится.
Пример
export default class ChildListRow2 extends React.PureComponent {
constructor() {
super();
this.state = {
loaded: false
};
}
imageLoaded = () => {
this.setState({ loaded: true })
}
render() {
return (
<ListItem
title = {
<View>
<Image
source = {{ uri: this.props.image }}
style = {styles.imageStyle}
onLoadEnd = {this.imageLoaded}
/>
<Text style = {styles.titleTextStyle}>{this.props.title}</Text>
</View>
}
subtitle = {
<View>
<Text style = {styles.subTitleTextStyle}>{this.props.description}</Text>
</View>
}
hideChevron = {this.state.loaded}
onPress = {() => Linking.openURL(this.props.url)}
containerStyle = {styles.listItemStyle}
/>
);
}
}
Как я могу использовать это, если я визуализирую изображение в отдельном файле компонента списка?
Не зная, как вы используете эти данные, я не могу предложить ничего подходящего. Если вы отредактируете свой вопрос с помощью кода, показывающего, как вы визуализируете свой компонент, я попытаюсь предложить что-то
Я обновился, чтобы показать, как я использую данные в другом компоненте. Как видите, я возвращаю счетчик до тех пор, пока данные не будут загружены, но затем изображение требует времени для рендеринга, что заставляет его выглядеть непрофессионально.
@garethiv добавил небольшой пример, чтобы показать, какие вещи вы можете использовать.
Большое спасибо за помощь.
@garethiv рад что смог помочь
Итак, вы хотите получить изображение пожарного хранилища в том же запросе?