2017-04-25 30 views
0

我在React Native中創建了一個應用程序,我遇到了一個我不明白的問題。TouchableHighlight OnPress不調用函數

事實上,當我按我的名單上的按鈕,與此相關的按鈕onPress財產不叫我的功能。

_onPressButton=() => { 
    Alert.alert("Lol"); 
} 

_renderRow (rowData, sectionID) { 
return (
    <TouchableOpacity style={styles.row} onPress={() => this._onPressButton}> 
    <Text style={styles.boldLabel}>{rowData.name}</Text> 
    <Text style={styles.label}>{rowData.art}</Text> 
    </TouchableOpacity> 
) 
} 

這兩個函數在我的類中,在render()之外。還有就是渲染:

render() { 
return (
    <View style={styles.container}> 
    <ListView 
     renderSectionHeader={this._renderHeader} 
     contentContainerStyle={styles.listContent} 
     dataSource={this.state.dataSource} 
     renderRow={this._renderRow} 
     renderFooter={this._renderFooter} 
     enableEmptySections 
     pageSize={15} 
    /> 
    </View> 
) 
} 
} 

所以,當我按下按鈕,沒有任何反應:/。有人有想法嗎? 感謝您的閱讀!

回答

0

您尚未調用_onPressButton函數。如果你想傳遞任何參數,那麼你可以將其套在箭頭功能

onPress={this._onPressButton} 

: 您只需通過對onPress處理此功能,無需使用箭頭功能,像這樣。

onPress={() => {this._onPressButton('someParams')}} 

PS您當前的代碼調用onPress處理,但不會調用你的_onPressButton功能

onPress={() => {this._onPressButton}} // _onPressButton is not invoked 
you have to invoke it as: 

{() => {this._onPressButton()}} 
+0

呀它幫助的感謝!但顯然我必須在渲染中寫renderRow = {this._renderRow.bind(this)}。你知道爲什麼嗎? –

+0

從jsx調用它時,「this」關鍵字的上下文丟失,因此您必須將其綁定。 我將在構造 this._renderRow = this._renderRow.bind建議結合功能(本); 或者像使用_onPressButton一樣使用箭頭函數。 –

+0

非常感謝! –

1

我認爲正確的做法是同時擁有renderRow & onRowPress構造都綁定這樣:

constructor (props) { 
    super(props) 

    this.renderRow = this.renderRow.bind(this) 
    this.onRowPress = this.onRowPress.bind(this) 

    } 

然後o ñrenderRow

renderRow (rowData) { 
    return (
     <TouchableOpacity onPress={() => this.onRowPress(rowData)} > 

     </TouchableOpacity> 
    ) 
    }