【问题标题】:React Native storing images for offline usageReact Native 存储图像以供离线使用
【发布时间】:2020-04-15 07:26:53
【问题描述】:

我的 React Native 应用程序从包含一组对象的 API 接收数据(产品),每个对象都有一个图片链接。有一个选项可以下载所有产品以供离线查看(我正在使用redux-persist + realm),但问题是图片本身不仅仅下载了它们的链接。 什么是我下载图片以便将它们附加到相应产品的最佳方式?

【问题讨论】:

标签: reactjs database react-native react-redux realm


【解决方案1】:

有多种方法可以做到这一点,通过手动方式,您可以使用来自 API 响应的地址将所有图像下载为 base64。你应该使用 JavaScript 来下载它们,让我们看看 JavaScript base64 下载:

const imageLink = 'https://www.google.com/images/branding/googlelogo/2x/googlelogo_color_272x92dp.png';

fetch(imageLink)
  .then(res => res.blob())
  .then(data => {
    const reader = new FileReader();
    reader.readAsDataURL(data);
    reader.onloadend = () => {
      const base64data = reader.result;
      console.log(base64data); // you can store it in your realm
    };
  });

下载每个图像后,将其存储在您的 realm 本地数据库中,并在使用时从 realm 调用它。

还有其他方法,例如使用库捕获图像。喜欢react-native-cached-image

【讨论】:

  • 那么,我是否对我拥有的每个 URL 进行单独的异步调用,然后将 base64 字符串作为数组保存在我的 redux 存储中?如果这样做,我将如何确定哪个产品对应哪个图像?
  • @АлександрФомин,是的,整个方法与您在评论中所写的完全一样。但是将每个图像保存为盯着你的 redux 存储的 base64 数据并不是一个好主意。我认为如果将其存储在 realm 数据库中,这是一个更好的解决方案。要将每个产品绑定到每个下载的图像,请将每个 base64 图像对齐边保存一个来自自己产品 id 的 id,例如:cachedImages = { 456: base64, 457: base64, ... },当你想使用它时,只需调用cachedImage[456]
猜你喜欢
  • 2016-11-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-10
  • 1970-01-01
  • 2012-02-13
  • 1970-01-01
相关资源
最近更新 更多