在React Native中,如何确定图像是否被缓存/预取?

时间:2017-09-21 04:12:45

标签: react-native

我正在缓存一些图片,如:

Image.prefetch(`${remoteImageUrl}/100x100`)
Image.prefetch(`${remoteImageUrl}/800x800`)
Image.prefetch(`${remoteImageUrl}/1000x1000`)

当发生这种情况时,想要显示当前可用的最高分辨率版本的组件可能会呈现。

if 1000 cached use 1000, 
elseif 800 cached use 800,  
elseif 100 cached use 100

如何测试“1000是否被缓存”?
我尝试了 .complete ,没有运气。

if (Image.prefetch(`${remoteImageUrl}/1000x1000`).complete) {}

如何检查React Native中是否存在预取图像?

1 个答案:

答案 0 :(得分:2)

使用开箱即用的API看起来不太可能。

首先,Image.prefetch不包含与预取缓存相关的任何其他方法。

深入细节 - 在iOS上,Image.prefetch调用原生RCTImageViewManager.prefetchImage方法,该方法间接加载图像并将其存储在RCTImageCache中。由于没有直接访问图像缓存的桥接功能,所以你有点不走运。

但是,您可以通过将对Image.prefetch的调用封装在跟踪哪些已完成的函数中来解决此问题:

// imagePrefetch.js

const prefetchedImages = {};

export function prefetchImage(url) {
  return Image.prefetch(url)
    .then(val => {
      prefetchedImages[url] = true;
      return val;
    });
};

export function isPrefetched(url) {
  return prefetchedImages[url] !== undefined;
}

请注意,这是您预取的图片的解决方法,而不是通过其他方式加载缓存的其他图片。