Выбор ответа Senior Состояние и данные обновлено
Гонка ответов при поиске
Вопрос
Поиск отправляет запрос на каждое изменение строки. Иногда на экране результаты для «ко», хотя введено «кот». Почему?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: Ответ на старый запрос пришёл позже нового и перезаписал результат на экране. Сеть не гарантирует порядок ответов.
Варианты ответа
- Ответ на старый запрос пришёл позже нового и перезаписал результат на экранеправильный ответ
- React Native кеширует строку ввода и отправляет в запрос её устаревшую копию
- Нужно увеличить таймаут запросов, тогда старые ответы успеют прийти вовремя
- Сервер всегда отвечает в порядке поступления запросов, значит баг в
TextInput
Разбор
Сеть не гарантирует порядок ответов. Если просто вызывать setResults по завершению, выиграет последний пришедший, а не последний отправленный. Решения: AbortController для отмены предыдущего запроса, проверка, что ответ относится к текущему запросу, или TanStack Query с ключом по строке поиска (он покажет данные актуального ключа). Плюс дебаунс, чтобы запросов было меньше. Таймаут и кеш ввода тут не помогут.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.