在导航到组件之前预加载图像

时间:2017-03-09 22:55:47

标签: react-native

这更像是一个概念性问题,但我不确定解决问题的确切方法。

我有一个我要从中下载图像的组件,但我希望能够在用户可以使用路由器磁通切换到它之前指示该组件已加载。

我猜这是我必须在redux中完成的事情,这是正确的想法吗?我一直试图找到一个做出反应的本机应用程序的例子。

非常感谢!

1 个答案:

答案 0 :(得分:11)

RN Image组件是处理这种情况的特定静态方法:https://facebook.github.io/react-native/docs/image.html#prefetch

注意:Image.prefetch会返回Promise

以下是如何使用React Native Router Flux(RNRF)实现此功能的示例,而不使用Redux:

let urlOfImages = [https://...]

let preFetchTasks = []; 

urlOfImages.forEach((p)=>{
    preFetchTasks.push(Image.prefetch(p));
});

Promise.all(preFetchTasks).then((results)=>{
    let downloadedAll = true;
    results.forEach((result)=>{
        if(!result){
            //error occurred downloading a pic
            downloadedAll = false;
        }
    })

    if(downloadedAll){
        Actions.someScene({ downloadedPics: urlOfImages})
    }
})

然后在 someScene 组件中使用像往常一样的图像组件,图像将从本地磁盘缓存中提取,而不是远程提取:

 <Image style={...} source={{uri: this.props.urlOfImages[0]}} />

另外请注意,如果您尝试从http而非安全的https端点加载图片,则会出现问题:https://github.com/facebook/react-native/issues/8520

如果您想将它与Redux一起使用,请将上述代码放入Action中,并确保您的Reducer响应操作并根据您的应用程序要求设置新状态。