解决React Native的Image组件中不更新图片的问题

使用React Native一段时间了,也遇到过不少的坑。有时候我们会用一个Image控件来显示图片,它用uri来请求远程图片,但这个图片会被更新,但请求的uri却不变。(典型的应用就是用户更新头像,而我们设计头像的uri存放在服务器的固定路径中,并以用户id来命名,最终,用户头像的uri就形如http://域名/图片路径/用户id.jpg)。

然而将这个uri写到Image控件后,得到<Image source={{uri:图片uri}} style={styles.icon}/>,这样的话,即使服务器中的图片改变了,这要它的文件名不变,导致请求图片的uri也不变,则Image中的图像的得不到更新的。我猜RN在设计Image时考虑到缓存问题,重新渲染Image前对比了前后的uri,如果相同的话则不再重新请求。

基于上述假设在uri后面添加一个随机参数v,让每次请求的uri都不相同,得到<Image source={{uri:图片uri?v=Math.random()}} style={styles.icon}/>,这样的话就可以解决服务器图片更新,Image图片不更新的问题。

解决上述问题还有一种方法,那就是采用base64编码字符串来显示图片。让服务器返回给前端一个图片的base64编码字符串,而不是通常意义下的图片uri。我们知道两个不同图片的base64编码字符串是不同的,所以下面的代码也可以解决上述问题:

this.setState({iconbase64:远程图片的base64编码字符串});

<Image source={{uri:this.state.iconbase64}} style={styles.icon}/>

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值