2016-05-11 8 views
2

私がやったやり方は、ヘッダーを押すと不透明度は変わりますが、クロムデバッガーコンソールには何も記録されません。 this.renderHeaderへReact Native:TouchableHighLight onPressがListViewのrenderHeaderメソッドで機能していません

onHeaderPressed() { 
    console.log('onHeaderPresseded is called'); 
    } 

    renderHeader() { 
    return (
     <TouchableOpacity 
     style={styles.header} 
     onPress={this.onHeaderPress} 
     activeOpacity={0.6} 
     underlayColor={'blue'}> 
     <View> 
      <Text> 
      Click here 
      </Text> 
     </View> 
     </TouchableOpacity> 
    ); 
    } 


    render() { 
    return (
     <ListView 
     style={styles.container} 
     renderHeader={this.renderHeader} 
     dataSource={this.state.dataSource} 
     renderRow={(item) => this.renderListItem(item)} 
     /> 
    ); 
    } 
+1

'renderHeader'メソッドの' TouchableOpacity'の中の ''の周りの' 'ラッパーを削除してみてください。それはあなたのための解決策になります。 –

+0

おそらく、関数を 'バインドする '必要があります。 'onPress = {this.onHeaderPress.bind(this)}'のようなものがあなたのために仕事をするはずです。 –

+0

@BilalBudhani私は、onHeaderPress内に小道具/状態がないと思うので、これをバインドする必要はありません。しかし、私はそれが動作しないことを試みた、それはコンポーネントのバグの場合は確信していません..... – jyhk

答えて

0
renderHeader() { 
    return (
     <TouchableOpacity 
     style={styles.header} 
     onPress={this.renderHeader} 
     activeOpacity={0.6} 
     underlayColor={'blue'}> 
     <View> 
      <Text> 
      Click here 
      </Text> 
     </View> 
     </TouchableOpacity> 
    ); 
    } 

変更は動作するはずです。

3

これはバインディングの問題です。 renderHeader関数をListViewコンポーネントに渡すと、ListViewのスコープから呼び出され、コンポーネントのものから呼び出されることはなく、onHeaderPressへの参照が失われます。あなたはこのようなあなたの機能をbindする必要があります:それは静かに失敗したので

render() { 
    return (
     <ListView 
     style={styles.container} 
     renderHeader={this.renderHeader.bind(this)} 
     dataSource={this.state.dataSource} 
     renderRow={(item) => this.renderListItem(item)} 
     /> 
    ); 
    } 

は、これは非常に厄介なバグです。オブジェクト内の未定義のキーにアクセスすると、単にundefinedが返され、onPress小道具はそれでうまくいきます。関数を呼び出そうとせず、エラーメッセージも表示されず、追跡が困難になります。

+0

これは私の(非常にイライラする)問題を完璧に - あなたに感謝した! – Zac

関連する問題