Я разрабатываю экран в виде галереи, который позволяет пользователям просматривать / управлять изображениями и, похоже, не может найти надежный способ кэширования этих мультимедийных ресурсов, что приводит к медленному времени загрузки.
Это мойпростая однострочная функция cacheImages:
import { Image } from 'react-native';
export const cacheImages = async (urls: string[]) => Promise.all(urls.map(Image.prefetch));
И я вызываю ее после выборки пользовательских носителей в mobx MediaStore.ts:
const urls = media
.filter(({ type }) => type === 'image')
.map(({ downloadURL }) => downloadURL.split('&token')[0]);
await cacheImages(urls);
const cache = await Image.queryCache(urls);
console.log(cache); // outputs {}
Поднимаясь по стеку, вызывается метод, содержащий приведенный выше кодиз AuthCheck.tsx (пример из документов по реактивной навигации) вот так:
async componentDidMount() {
firebase.auth().onAuthStateChanged(async (user: any) => {
const { navigate } = this.props.navigation;
if (user) {
store.userStore.user = new User(user);
await store.userStore.mediaStore.subscribeToMedia();
navigate('Media');
} else {
navigate('Auth');
}
});
}
В конце концов, если я поставлю:
<Image source={{ uri: downloadURL, cache: 'only-if-cached' }} style={{ width: '100%', height: '100%' }} />
нет изображенийпоказать (что ожидается, поскольку Image.queryCache
выводит пустой объект)
Кроме того, все URL-адреса для загрузки работают, и я жду Promise.all, возвращенный из chacheImages, и жду этого в AuthCheck.tsx, поэтому я считаю, что эта проблемане из-за размонтирования компонента или неправильных URL-адресов. Спасибо!