2016-04-18 8 views
3

リストビューの行のクラスベースの定義からイベントをトリガーする正しい方法が見つかりません。ここで私はこれまで来onPress内部リストビューの行のネイティブバインディングイベントに反応します

class SampleApp extends React.Component { 

    constructor(props){ 
    super(props) 
    this.state = { 
     dataSource: ds.cloneWithRows(this._partners()), 
    } 

    // this._click = this._click.bind(this); 
    } 

_click() { 
    console.log('clicked'); 
    } 

    _renderRow(rowData) { 
    return (<TouchableHighlight onPress={() => {this._click();}}> 
     <Text style={{ fontSize:18 }}>{rowData}</Text> 
     </TouchableHighlight>); 
    } 

    render() { 
    console.log('Partners: ', this._partners()) 
    return (
     <View style={styles.container}> 
     <ListView 
     dataSource={this.state.dataSource} 
     renderRow={ this._renderRow } /> 
     </View> 
    ); 
    } 
} 

thisは、コンポーネントを反応させるために言及されていないものです。どうすれば修正できますか?これは、反応の遊び場のリンクですhttps://rnplay.org/apps/Xd-l3w

答えて

5

これを試してください。

constructor(props){ 
    super(props) 
    this.state = { 
    dataSource: ds.cloneWithRows(this._partners()), 
    } 

    this._renderRow = this._renderRow.bind(this); 
} 

_renderRow()にはスコープが含まれていません。これを再バインドすると問題が解決されます。

onPress={this._click}は、this._clickを別の機能に置く代わりに機能します。

ここにはfork of your codeがあります。

+0

は機能しません。 'nullはオブジェクトではありません.' –

+0

あなたはどのバージョンのRNを使用していますか? – Zidail

+0

0.21。 'react playround'リンクを確認してください。クラスベースの定義 –

関連する問題