I currently have an Image wrapped inside of a TouchableOpacity tag. The image is of a sound icon, and when the user clicks it, I would like the icon to switch between the \"
Tag is JSX Syntax so you cannot edit its property by .(dot) syntax. Following is the correct way to do it.
import soundImg from '../images/sound.png';
import muteImg from '../images/sound-mute.png';
class HomeScreen extends Component {
constructor() {
super();
this.state = { showSoundImg: true };
}
static navigationOptions = {
header: null,
};
renderImage() = {
var imgSource = this.state.showSoundImg? soundImg : muteImg;
return (
<Image
style={ homeStyles.optionsImage }
source={ imgSource }
/>
);
}
render(){
return (
<View style={ commonStyles.container }>
<View style={ commonStyles.footer }>
<TouchableOpacity
style={ homeStyles.soundButton }
onPress={ () => this.setState({ showSoundImg: !this.state.showSoundImg }) }
/>
{this.renderImage()}
</TouchableOpacity>
</View>
</View>
);
}
}
I'm using the following way and its working fine.
class HomeScreen extends Component {
static navigationOptions = {
header: null,
};
constructor() {
super();
this.state = {
flagImage:true
};
}
render(){
let imageXml = <Image
style={ homeStyles.optionsImage }
source={ gearImg }
/>;
return (
<View style={ commonStyles.container }>
<View style={ commonStyles.footer }>
<TouchableOpacity
style={ homeStyles.soundButton }
onPress={ this.changeImage }>
<Image source={ this.state.flagImage === true ?
require('../images/sound.png') :
require('../images/sound-mute.png')}
/>
</TouchableOpacity>
</View>
</View>
);
}
}
changeImage() {
this.setState({
flagImage:!this.state.flagImage
});
}