У меня есть плоский список в ReactNative, который извлекает список статей из API.Когда достигается конец списка при прокрутке, еще одна страница статей извлекается из API и добавляется в список статей в редукторе Redux.
FlatList устанавливается как:
render() {
return(
<FlatList data={this.props.articles.articles} // The initial articles list via Redux state
renderItem={this.renderArticleListItem} // Just renders the list item.
onEndReached={this.pageArticles.bind(this)} // Simply calls a Redux Action Creator/API
onEndReachedThreshold={0}
keyExtractor={item => item.id.toString()}/>
)};
Объект состояния Redux 'Articles' сопоставляется с компонентом с помощью функции подключения React Redux.Соответствующий редуктор (некоторые элементы удалены для краткости) выглядит следующим образом:
/// Initial 'articles' state object
const INITIAL_STATE = {
articles: [],
loading: false,
error: '',
pageIndex: 0,
pageSize: 10
};
export default(state = INITIAL_STATE, action) => {
switch(action.type){
// The relevant part for returning articles from the API
case ARTICLES_SUCCESS:
return { ...state, loading: false, articles: state.articles.concat(action.payload.items),
pageIndex: action.payload.pageIndex, pageSize: action.payload.pageSize}
default:
return state;
}
}
Полезная нагрузка - простой объект - статьи содержатся в массиве action.payload.items
, а также есть дополнительная информация о подкачке вполезная нагрузка (не важно для этой проблемы).
Все в порядке с API, возвращающим правильные данные.
Проблема заключается в том, что когда достигается конец FlatList при прокрутке, APIПосле этого новые статьи прекрасно обрабатываются и добавляются к объекту состояния this.props.articles и к FlatList, НО FlatList переходит / прокручивается обратно к первому элементу в списке.
Я думаю, что проблема в том, чтовозможно с тем, как я возвращаю состояние в редуктор Redux, но я не уверен, почему.
Использует ли concat
правильный способ вернуть новое состояние с добавленными новыми статьями?