У меня есть список, содержащий список строк. Первоначально массив, из которого он получает свои строки, должен быть пустым, но для его проверки я предоставил данные. Однако он не появляется. Он отображается только при вызове lapPressed, который предназначен для добавления строки в таблицу с новой строкой. И новая строка добавляется только после того, как я снова нажму кнопку. Эти петли и новые данные добавляются только после вызова lapPressed снова.React-Native ListView неправильно загружает данные
Резюмируя:
- начальных элементов кругов массива не показывает, пока lapPressed не называются
- Новых строк не отображается до тех пор, lapPressed не был назван дважды
I удалили нерелевантный код, Вот мой код:
constructor(props) {
super(props);
var ds = new ListView.DataSource({rowHasChanged: (r1, r2) => r1 !== r2});
//dataSource: this.state.dataSource.cloneWithRows(this.state.laps)
this.state = {
laps: [2,3],
dataSource: ds.cloneWithRows(this.laps),
}
}
render() {
return <View>
{this.showList()}
</View>
}
showList() {
return <ListView
dataSource={this.state.dataSource}
renderRow={this.renderRow.bind(this)}
/>
}
renderRow(rowData, sectionID, rowID) {
return (
<View style={styles.row}>
<Text style={styles.rowText} numberOfLines={1}>{rowData}</Text>
</View>
);
}
lapPressed =() => {
var lap = formatTime(this.state.timeElapsed);
this.setState({
startTime: new Date(),
laps: this.state.laps.concat([lap]),
dataSource: this.state.dataSource.cloneWithRows(this.state.laps)
});
return
}
Это означает, что первые элементы появляются при запуске, но вторая проблема все еще существует. Когда я вызываю lapPressed, ничего не обновляется, когда я нажимаю его снова, он обновляется, он всегда один позади. – james
Такая же проблема. Ваш вызов 'cloneWithRows' получает предыдущее значение кругов. 'this.state.laps' еще не обновлен. –
Спасибо, я просто подумал об этом в то же время :) – james