我目前在TouchableOpacity标签内部包含一个Image。图像是一个声音图标,当用户点击它时,我希望图标在"声音之间切换。图标和"声音关闭"图标。相关代码如下所示。我还没有担心它的切换部分,我只是希望能够在点击它时切换图像。
简化代码如下:
const soundImg = require('../images/sound.png');
const muteImg = require('../images/sound-mute.png');
class HomeScreen extends Component {
static navigationOptions = {
header: null,
};
render(){
let imageXml = <Image
style={ homeStyles.optionsImage }
source={ gearImg }
/>;
return (
<View style={ commonStyles.container }>
<View style={ commonStyles.footer }>
<TouchableOpacity
style={ homeStyles.soundButton }
onPress={ () => imageXml.source = { muteImg } }>
{ imageXml }
</TouchableOpacity>
</View>
</View>
);
}
}
答案 0 :(得分:4)
标签是JSX语法,因此您无法通过。(点)语法编辑其属性。以下是正确的方法。
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>
);
}
}
答案 1 :(得分:3)
我正在使用以下方式,并且工作正常。
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
});
}
答案 2 :(得分:0)
这就是我使用组件功能实现切换控制的方式。
import React, { useState } from 'react';
import { View, Image, StyleSheet, Pressable, Text, Switch } from 'react-native';
import images from '../assets/images';
function ToggleControl(props) {
let [flag, setFlag] = React.useState(true);
let toggleSwitch = () => setFlag(previousState => !previousState);
let imageUri = flag ? images.toggleOn : images.toggleOff;
return (
<Pressable onPress={ () => toggleSwitch() } >
<Image source={{ uri: imageUri }} style={{width: 44, height: 20}} />
</Pressable>
);
}
export default ToggleControl;