2017-11-11 33 views
1

我正在开发反应原生的UI,在此<Image>与源一起使用,我想通过setNativeProps而不是按状态更改图像源。如何通过在原生反应中使用setNativeProps更改图像源

我的代码是:

<Image source={require('imagePath')} ref="icon"/> 

在某些事件中,我想改变它的来源:

this.refs['icon'].setNativeProps({ 
    source: require('newImagePath') 
    }); 

但什么也没有发生,它不会改变。 通过使用NativeProps,图像风格发生了改变,但像源和类似的道具没有改变。

所以,请给我,我如何能(通过使用this.setState不)改变图像的任何特定事件源通过其裁判或关键的解决方案

+0

同样的问题https://stackoverflow.com/questions/45754845/reactnative-image-setnativeprops-unable-to-change-source – zarcode

回答

0

终于让我找到你可以改变的方式图像源由静态图像。我们首先需要将resolveAssetSource函数用于静态图像,然后将其放入src中。

import resolveAssetSource from 'resolveAssetSource'; 

... 


var imgsrc = require('imagePath'); 

this.refs['icon'].setNativeProps({ 
    src: [resolveAssetSource(imgsrc)] 
}); 

更新:

在iOS上,使用来源,而不是SRC。

+0

感谢丹尼斯的帮助,但我想用这个改变静态图像。 –

+0

我已经编辑了我的答案,请参阅上面的内容,已经过测试并正在工作 – DennisFrea

+0

感谢Dennis .....它对我有效... –

-1

我想这是不可能的,因为RN处理状态的方式和require()捆绑文件的方式。

不过,我能想到的两件事情尝试:

  1. ForceUpdate:尝试调用this.refs [ '图标'] forceUpdate()后,本机的道具强制重新渲染。
  2. 在图像中设置一个包装并更新该包装,以便不修改原始图像源。

事情是这样的:Programmatically add a component in React Native

0

感谢@DennisFrea谁给了我一直在寻找的答案 - 只需添加源作为数组,而不是一个对象。

正确的语法

this._imageContainer.setNativeProps({ 
    source: [{ uri: newImageSource }] 
}) 

不正确的语法

this._imageContainer.setNativeProps({ 
    source: { uri: newImageSource } 
}) 
这里