2016-11-02 5 views
1

Schwer zu erklären, aber ich möchte etwas tun: eine variable Zeichenfolge in dem Zustand wie folgt verwendenReagieren Nativ: this.state.variableString

constructor(props) { 
    super(props); 

    this.state = { 
     photoTree: "beautiful photo", 
     photoDoor: "photo of a door", 
     photoTreeSource: "/assets/tree.png", 
     photoDoorSource: "/assets/door.png", 
    } 
} 

doSomething(name) { 
    let _state = "photo" + name; 
    let _stateSource = _state + "Source"; 

    console.log(this.state. + _state); 
    console.log(this.state. + _stateSource); //something like this 
    console.log(this.state._state); 
} 

render() { 
    return(
     <View> 
      <TouchableOpacity style={style.button} onPress={this.doSomething.bind(this, "Tree")} /> 
      <TouchableOpacity style={style.button} onPress={this.doSomething.bind(this, "Door")} /> 
     </View> 
    ) 
} 

Ich weiß, dass ein Objekt wie ‚Foto zu tun: {Baum: "schön ..", Tür: "blablabla ..."} wäre besser, aber ich möchte wissen, ob wir etwas wie oben, nur aus Neugierde tun können.

Antwort

2

Wenn jemand Interesse ist, kann man so etwas in doSomething (name) tun:

doSomething(name) { 
    let _state = "photo" + name; 

    console.log(this.state[_state]) // it work ! 
} 
0

Sie setState statt der Schaffung neuer Variable initialisiert sie verwenden können.

+0

Ich will nicht eine neue Variable erstellen Ich möchte nur die state.photoTree oder state.photoDoor zeigen, wo photoDoor in einem String war wie: const propertiesName = „photoDoor“ und verwenden Sie es wie die Konsole. log (this.state.propertiesName) aber ich habe eine Lösung gefunden (this.state [propertiesName]) –

Verwandte Themen