无法在React-Native上使用ListView更新dataSource

时间:2017-07-29 13:13:16

标签: javascript reactjs listview react-native datasource

我正确地获取我的JSON数据并且打印正常,但是我无法将其设置为列表的数据源,因此我可以正确更新我的行。打印this.state.dataSource时,它将返回undefined。我返回的JSON是一个数组。

export default class CoinCheckerRN extends React.Component {

constructor(props) {
    super(props);
    const dataSource = new ListView.DataSource({rowHasChanged: (row1, row2) => row1 !== row2});
    this.state = {
        dataSource: dataSource.cloneWithRows(['row 1', 'row 2']),
    };

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

}

componentDidMount() {
    getCryptocurrencyData().then(function(result) {
        console.log('??????', result[0].name)
        this.setState({ dataSource: this.state.dataSource.cloneWithRows(result)});
        console.log('??', this.state.dataSource);

    }).catch(function(error) {
        console.log('!!!!!', error)
    });



}

_renderRow(data) {
    return (
        <CoinCell coinName={'Bitcoin'} coinPrice={'£1,000'} coinPercentageChange={'-4.2%'}></CoinCell>        )
}

render() {
    return (
        <View>
            <ListView
                enableEmptySections
                ref={'resultListView'}
                dataSource={this.state.dataSource}
                renderRow={(data) => this._renderRow(data)}
                renderSeparator={(sectionId, rowId) => <View key={rowId} style={styles.separator} />}
                renderHeader={() => <Header />}
            />
        </View>
    );
}

}

任何帮助将不胜感激

1 个答案:

答案 0 :(得分:0)

使用此处列出的一个先前答案进行管理以稍微调整一下来修复它:

 _getCoinData() {
    getCryptocurrencyData().then(function(result) {

        const ds = new ListView.DataSource({rowHasChanged: (row1, row2) => row1 !== row2});
        this.setState({
            dataSource: ds.cloneWithRows(result),
            jsonData: result
        });

        console.log('!!!', this.state.jsonData);
    }.bind(this))
}