如何通过此方法调用该方法(React Native)?

时间:2016-06-05 08:02:52

标签: javascript react-native

renderTopicList(){
    // console.log(this.props);
    //console.log(this.state.dataSource);
    return (
        <ListView
        style={Style.listView}
        ref="listview"
        pageSize={15}
        dataSource={this.state.dataSource}
        renderFooter={this.renderFooter}
        renderRow={this.renderTopicListCell}
       // onEndReached={this.onEndReached}
        automaticallyAdjustContentInsets={false}
        showsVerticalScrollIndicator={false} 
        />
    );
}

renderTopicListCell(data){
    return (
        <TopicListCell
            onSelect = { () => this.selectTopic(data) }
            data={data} />
    );
}
selectTopic(data){

    this.props.navigator.push({
        title: '详细' + (data.replies_count ? '(' + data.replies_count.toString() + '条回复)' : ''),
        component: TopicView,
        passProps: {
            data: data
        }
    });
}

在单元格中调用onSelect:<TouchableHighlight onPress={this.props.onSelect}/>

当我点击单元格时,它会给我以下错误:_this3.selectTopic不是一个函数。(在&#39; _this3.selectTopic(data)&#39;,&#39; _this3.selectTopic&#39 ;未定义)

1 个答案:

答案 0 :(得分:1)

您可以通过两种方式解决此问题。

1)在组件构造函数中,您可以绑定要传递的函数。例如:

constructor() {
  super();

  // Binding the function 
  this.selectTopic.bind(this);
}

然后,您可以使用传递数据

renderTopicListCell(data){
    return (
        <TopicListCell
            onSelect={this.selectTopic(data)}
            data={data} />
    );
}

2)您可以在传递函数时绑定该函数。

<TopicListCell onSelect={this.selectTopic.bind(this, data)} data={data} />

我更喜欢以前的方法,这样我在一个地方进行了所有绑定调用,并且我将绑定它一次。