2017-06-17 6 views
0

Ich habe derzeit ein Bild in einem TouchableOpacity-Tag eingewickelt. Das Bild besteht aus einem Sound-Symbol, und wenn der Benutzer darauf klickt, möchte ich, dass das Symbol zwischen dem "Ton ein" -Symbol und dem "Ton aus" -Symbol wechselt. Der entsprechende Code ist unten zu sehen. Ich mache mir noch keine Gedanken über den Toggle-Teil davon, ich würde nur gerne das Bild wechseln können, wenn ich darauf tippe.Änderung reagieren Native Image-Quelle beim Klick

Simplified Code ist unten:

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

Die Bildquelle im Status speichern und einen setState() mit neuer Bildquelle beim Drücken der Taste ausführen. Dadurch wird die Komponente erneut gerendert und Sie können das neue Bild aus dem Status festlegen. –

Antwort

2

Tag JSX Syntax ist, so dass Sie nicht ihr Eigentum durch bearbeiten können (dot) Syntax.. Folgendes ist der richtige Weg, dies zu tun.

const soundImg = require('../images/sound.png'); 
const muteImg = require('../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 }) } 
      /> 
      {thi.renderImage()} 
      </TouchableOpacity> 
     </View> 
     </View> 
    ); 
    } 
} 
+0

Danke! Funktioniert perfekt. Ich bin noch neu zu Reagieren, aber das macht viel mehr Sinn. – OstrichGlue