2

私が行った方法は次のとおりです。ヘッダーを押すと、不透明度が変化しますが、クロムデバッガコンソールには何も記録されません。

  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、 のスコープから呼び出されるためListView、 への必要な参照が失われonHeaderPressます。次のように機能する必要がありbindます。

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

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

于 2016-11-30T13:41:39.807 に答える