Выбор ответа Middle Списки и производительность спрашивают часто обновлено
FlatList: дубли страниц при onEndReached
Вопрос
Бесконечная лента иногда загружает одну страницу дважды. В чём вероятная причина?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: onEndReached срабатывает повторно до конца загрузки; нужен флаг и проверка конца. При прокрутке и изменении содержимого событие конца списка может прийти повторно, пока данные ещё грузятся.
Варианты ответа
onEndReachedThresholdнельзя задавать меньше 1, иначе событие дублируетсяFlatListвсегда вызываетonEndReachedдважды, это поведение по спецификации- Сервер должен сам отбрасывать повторные запросы, клиент тут ни при чём
onEndReachedсрабатывает повторно до конца загрузки; нужен флаг и проверка концаправильный ответ
Разбор
При прокрутке и изменении содержимого событие конца списка может прийти повторно, пока данные ещё грузятся. Защита: не запускать загрузку, если она уже идёт или страниц больше нет, и склеивать страницы с удалением дублей по id. TanStack Query (useInfiniteQuery с isFetchingNextPage) делает это за вас. Порог может быть дробным (0.5 это половина экрана), а «вызов дважды по спецификации» не существует.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.