2015-09-15 2 views
6

Ich habe eine Liste von Ansichten, jede Ansicht von TouchableHighlight gewickelt, binde ich einen onPress Handler für jeden Touchablewie Absender erhalten in TouchableHighlight der onPress

.... 
    <TouchableHighlight onPress={this._preformTouchItem}> 
    <View style={styles.item}> 
     <Text>{displayContent}</Text> 
    </View> 
    </TouchableHighlight> 
    .... 

_preformTouchItem(event) { 
} 

ich es in Chrome Dev-Tools debuggen, das ‚Ereignis‘ bindet das 'sender' Objekt nicht,

+0

Warum müssen Sie wissen, auf welche Ansicht geklickt wird? Können Sie Ihren vollständigen Code teilen? In React interagieren Sie normalerweise nicht mit Ansichten, sondern rufen 'setState' auf und lassen React die Benutzeroberfläche für Sie neu rendern. –

Antwort

5

In React würden Sie normalerweise nicht direkt mit Ansichten interagieren, sondern rufen Sie setState an und lassen Sie React die Benutzeroberfläche für Sie neu rendern. Zum Beispiel würden Sie den Index des Elements übergeben:

getInitialState: function() { 
    var itemToggleStates = [false, false, false]; 
    return itemToggleStates; 
}, 

render: function() { 
    for (i = 0; i < itemToggleStates.length; i++) { 
    ... 
    var currentIndex = i; 
    var itemText = this.state.itemToggleStates[currentIndex] ? 'yes' : 'no'; 
    <TouchableHighlight onPress={() => this._handleItemTouch(currentIndex)}> 
     <Text>{itemText}</Text> 
    </TouchableHighlight> 
    ... 
    } 
    ... 
}, 

_handleItemTouch: function(index) { 
    var itemToggleStates = this.state.itemToggleStates; 
    itemToggleStates[index] = !itemToggleStates[index]; 
    setState(itemToggleStates); 
} 

In seltenen Fällen, wenn Sie wirklich die zugrunde liegende Ansicht zugreifen müssen, da ein Konzept refs genannt ist.