试图在ListView的一行中执行一个函数

时间:2016-07-19 16:57:33

标签: reactjs react-native

我的组件中有一个LisView,如下所示:

class Test extends Component {

  constructor(props) {
    super(props);

    const ds = new ListView.DataSource({ rowHasChanged: (r1, r2) => r1 !== r2 });
    this.state = {
      dataSource: ds.cloneWithRows(this.props.dataSource),
    };
  }

  componentWillReceiveProps(nextProps) {
    if (this.props.dataSource !== nextProps.dataSource) {
      this.setState({
        dataSource: this.state.dataSource.cloneWithRows(nextProps.dataSource),
      });
    }
  }

  onPressRow(key) {
    console.log(key);
  }

  getListView() {
    if (this.props.isLoading) {
      return (
        <ActivityIndicator
          animating
          size={'small'}
          style={styles.spinner}
          color={this.props.activityIndicatorColor}
        />
      );
    }
    return (
      <ListView
        style={styles.listView}
        keyboardShouldPersistTaps
        keyboardDismissMode="on-drag"
        enableEmptySections
        dataSource={this.state.dataSource}
        renderRow={this.renderRow}
        automaticallyAdjustContentInsets={false}
      />
    );
  }

  renderRow(rowData) {
    return (
      <View
        style={styles.listButton}
      >
        <TouchableHighlight
          style={styles.button}
          onPress={() => this.onPressRow(rowData)}
        >
          <Text>
            {rowData.description}
          </Text>
        </TouchableHighlight>
      </View>
    );
  }

  render() {
    return (
      <View>
        <View>
          // TEXTINPUT
        </View>
        {this.getListView()}
      </View>
    );
  }
}

export default Test;

当我点击一行时,我想执行一个函数,但我有这个错误:

  

_this2.onPressRow不是函数

为什么我无法阅读该功能?我必须把它当成道具?

1 个答案:

答案 0 :(得分:0)

如果您使用renderRow={this.renderRow.bind(this)} ,则所有呼叫都会自动绑定,但在使用super()的ES6方法时,您必须绑定所有功能。

您可以使用

进行内联
this.renderRow = this.renderRow.bind(this);

或者,您可以在ul { font-family: Arial; } <ul class="nav navbar-nav pull-right"> <li><a href="#"><span class="glyphicon glyphicon-user"> My Account</a></li> </ul>

之后添加到构造函数中
{{1}}

我个人喜欢这种方法,因为我觉得这段代码更容易阅读。

有关ES6方式的更多信息,请查看this link