Я использую state
для хранения следующих данных.
state = {
refresh: true,
isFetching: true,
showLoadingBottom: false,
data: []
};
при componentDidMount
Я вручную вызываю функцию _fetchData
, которая загружает данные в this.state.data
.
Когда плоский список прокручивается до конца, он запускает _fetchData
дважды, что в итоге возвращает те же данные дважды (что является еще одной проблемой, почему оно запускается дважды?).
Как только плоский список достигает конца, т. Е. С сервера больше не возвращается никаких данных, он входит в бесконечный цикл, поскольку onEndReached
непрерывно запускается снова и снова, даже если с сервера не возвращаются новые данныеи this.state.data
остается прежним.
Это мой render
код
render() {
return (
<View
style={{
flex: 1
}}>
<FlatList
refreshControl={
<RefreshControl
refreshing={this.state.refresh}
onRefresh={() => {
this.setState({
refresh: true
}, this._fetchData);
}}
title={"Pull To Refresh"}
tintColor={darkGrey}
titleColor={darkGrey}/>
}
onEndReachedThreshold={0.5}
onEndReached={() => {
this.setState({
showLoadingBottom: true
}, () => {
this._fetchData();
});
}}
showsVerticalScrollIndicator={false}
data={this.state.data}
ListFooterComponent={() => {
return (
this.state.showLoadingBottom &&
<View style={{padding: 10}}>
<ActivityIndicator size="small" color={colorAccent}/>
</View>
);
}}
renderItem={this._renderItem}
keyExtractor={(item) => item.id.toString()}
removeClippedSubviews={true}
/>
</View>
);
}