0

我有這個ListView UI,開始運行緩慢,一旦我在TouchableOpacity的onPress事件處理程序中添加了rowData參數。一旦TouchableOpacity被按下,它保持按下15秒,然後再次平穩運行。TouchableOpacity onPress掛在ListView內

似乎有一些衝突,因爲我在也在renderRow事件處理程序的ListView三行上面。

我是對的,如何解決這個問題?

<ListView 
    dataSource={this.state.dataSource} 
    keyboardShouldPersistTaps={true} 
    renderRow={(rowData) => 
     <TouchableOpacity 
      onPress={(rowData) => { 
       console.log(rowData);//ON THIS LINE IT HANGS 15s 
      }} 
     > 
      <Text>{rowData}</Text> 
     </TouchableOpacity> 
    } 
    automaticallyAdjustContentInsets={false} 
/> 
+0

多大rowData? –

+0

大約5個對象內的數據,緩慢可能是通過在調試模式下運行增強。 –

回答

3

我是什麼使得在JavaScript這個如此昂貴的操作說明真正感興趣的,但問題是,你傳遞rowData作爲參數傳遞給你的onPress功能,當rowData已聲明在範圍上限(renderRow)。所以是的,就像你說的那樣,有一個碰撞。

實際上,rowData的值由onPress重新定義,因爲onPress函數接收到觸摸事件作爲參數。 (你會注意到被記錄的數據實際上不是你原來的行數據,而是一個觸摸事件對象)。

您可以通過簡單地重命名onPress函數的第一個參數來解決此問題。例如

<TouchableOpacity 
     onPress={(evt) => { 
     console.log(rowData); //now it doesn't hang 
     }} 
> 
+0

謝謝,我的問題解決了 – nguyencse

1

我們可以把標題與Webview?像

渲染(){// eslint-禁用線類的方法 - 使用 - 這 回報(

<Container theme={theme} style={{ backgroundColor: theme.defaultBackgroundColor }}> 
    <Header style={{ justifyContent: 'flex-start', paddingTop: (Platform.OS === 'ios') ? 23 : 9 }}> 
     <Button transparent onPress={() => this.popRoute()} > 
     <Icon name="ios-arrow-round-back-outline" style={{ fontSize: 30, lineHeight: 32, paddingRight: 10 }} /> 
     Find Stores 
     </Button> 
    </Header> 

    <WebView 
     ref={WEBVIEW_REF} 
     automaticallyAdjustContentInsets={false} 
     source={{uri: this.state.url}} 
     javaScriptEnabled={true} 
     domStorageEnabled={true} 
     decelerationRate="normal" 
     onNavigationStateChange={this.onNavigationStateChange} 
     onShouldStartLoadWithRequest={this.onShouldStartLoadWithRequest} 
     startInLoadingState={true} 
     scalesPageToFit={this.state.scalesPageToFit} 
    /> 

    </Container> 
); 
相關問題