0

TouchableOpacity のイベント ハンドラーrowData内にパラメーターを追加すると、この ListView UI の実行が遅くなりました。onPressTouchableOpacity が押されると、15 秒間押されたままになり、その後再びスムーズに実行されます。

上の3行のListViewrowDataのイベントハンドラでも使っているので、衝突しそうです。renderRow

私は正しいですか、この問題を解決するにはどうすればよいですか?

<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}
/>
4

2 に答える 2

4

これが JavaScript でこのように高価な操作になる理由の説明に本当に興味がありますが、問題は、 が上位スコープで既に宣言されているときに、関数にrowData引数として渡していることです ( )。そうです、あなたが言ったように、衝突があります。onPressrowDatarenderRow

関数はタッチ イベントを引数として受け取るため、事実上、 の値rowDataは によって再定義されます。(ログに記録されているデータは、実際には元の行データではなく、タッチ イベント オブジェクトであることがわかります)。onPressonPress

関数の最初の引数の名前を変更するだけで、これを修正できますonPress。例えば

 <TouchableOpacity
       onPress={(evt) => {
         console.log(rowData); //now it doesn't hang
       }}
 >
于 2016-09-25T23:25:06.627 に答える
1

Webview でヘッダーを付けることはできますか? お気に入り

render() { // eslint-disable-line class-methods-use-this return (

  <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>
);
于 2016-12-20T08:00:49.083 に答える