Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/jenkins/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
React native 防止React Native缓存本地映像_React Native - Fatal编程技术网

React native 防止React Native缓存本地映像

React native 防止React Native缓存本地映像,react-native,React Native,我有一个应用程序大量使用React Native的图像组件 我知道缓存对远程图像有好处,但我需要加载定期更改的本地图像 映像组件正在缓存文件并显示缓存的版本,即使本地文件发生更改 问题是如何禁用本地文件上的缓存,但将其保留在远程URL上(因为我混合了本地和远程文件) 我会给出一个代码示例,但实际上它很简单 注意:这些文件是通过应用程序中的操作创建和更改的,因此require('image.png')不会剪切这些文件。我一直用它来处理静态图像,效果很好,但它是静态的,不是动态的 我还看到了字符串

我有一个应用程序大量使用React Native的图像组件

我知道缓存对远程图像有好处,但我需要加载定期更改的本地图像

映像组件正在缓存文件并显示缓存的版本,即使本地文件发生更改

问题是如何禁用本地文件上的缓存,但将其保留在远程URL上(因为我混合了本地和远程文件)

我会给出一个代码示例,但实际上它很简单

注意:这些文件是通过应用程序中的操作创建和更改的,因此
require('image.png')
不会剪切这些文件。我一直用它来处理静态图像,效果很好,但它是静态的,不是动态的

我还看到了字符串末尾关于随机查询参数的答案。一般说来,这是非常令人讨厌的,所以我不会雇用你做工作:)但除此之外,这显然不起作用

提前干杯


当图像文件发生变化时,根据far的指令和答案,要非常清楚。它需要立即更改图像组件,以便清除缓存和状态并显示新图像。

捕获对您的应用程序有好处,因此您不想停止。解决这类问题的方法是更改图像的名称以及图像本身。更改图像而不更改名称将不会起任何作用

你可以吃这样的东西

<Image source={{uri: `file://${imageName}`}} />, 

我认为问题在于图像资源本身没有更改的侦听器(我也不认为有这样的库)。如果您不想更改文件名,唯一可能的解决方案是触发一个事件(或state/redux-change),在每次更改代码中的映像时强制重新加载组件


否则,您必须编写自己的库,该库始终侦听图像更改并在每次更改时重新加载组件。

回答有点晚,但您可以在变量中添加查询
“?time=new Date()”
,如下所示:

 const [profilePicture] = useState(`${baseURL}${user.infoUser.image_profile}?time=${new Date()}`);

这种方法的主要问题是每次都会刷新图像,因此显示图像的延迟可能很高。

我要求不要缓存图像,以便反映更改。你的例子说明了什么?当状态改变时,它会触发重新加载吗?我以前也遇到过类似的问题,为了反映图像名称和图像本身的动态变化。这可能是有或没有状态取决于您的要求。我希望不断更改图像名称,但应用程序的另一部分会生成图像。如果我不断更改名称,我必须不断删除旧文件等。这将成为管理和性能的噩梦。我理解你的问题,这是一个非常难处理的问题。尝试其他解决方案,如果全部失败,那么您只需进行管理,尽管我不认为源属性有一个缓存属性,可以选择重新加载,强制缓存,仅当重新加载时。我尝试重新加载,这可能会纠正它,但当我在react导航中切换屏幕时,并没有重新加载触发。很高兴听到有人提出了一个现实世界的有效解决方案!我更改图像的键或URL本身,并在ios上设置cache=reload作为图像的源属性。我还意识到,在图像实际保存到磁盘之前,我正在更新状态,这让我觉得它没有工作——它正在重新加载旧图像。这让我慢了一点,但我会接受这是正确的答案,因为触发状态更改将导致重新渲染。我接受这个答案,尽管从技术上讲它不是一个确切的答案。这可能是我能想到的最接近的一次,多亏了它,我才设法解决了我的问题。
 const [profilePicture] = useState(`${baseURL}${user.infoUser.image_profile}?time=${new Date()}`);