2

我这样做的方式如下,当按下标题时,不透明度确实发生了变化,但chrome调试器控制台中没有记录任何内容。

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

2 回答 2

3

这是一个有约束力的问题。当您将renderHeader函数传递给ListView组件时,它将ListViewonHeaderPress. 你需要bind你的功能是这样的:

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

这是一个非常讨厌的错误,因为它会默默地失败。访问对象中未定义的键将简单地返回undefined,并且onPressprop 很好,它不会尝试调用该函数,并且您不会收到错误消息,因此难以跟踪。

于 2016-11-30T13:41:39.807 回答
0
renderHeader() {
    return (
      <TouchableOpacity
        style={styles.header}
        onPress={this.renderHeader}
        activeOpacity={0.6}
        underlayColor={'blue'}>
        <View>
          <Text>
            Click here
          </Text>
        </View>
      </TouchableOpacity>
    );
  }

更改 this.renderHeader 应该可以工作。

于 2016-09-24T21:02:42.433 回答