Пагинация и консистентность данных
Вопрос
Как обеспечить, чтобы после изменения объекта на одном экране он был актуален в списке, деталях и счётчиках на других экранах?
Попробуйте сами
Ответьте вслух за 2 минуты, как на собесе. Потом сверьтесь с тезисами: что прозвучало, а что нет.
Показать ответ и разбор
Коротко
Что должно прозвучать в ответе
Один источник правды: кеш запросов или нормализованный стор
Инвалидация связанных ключей после мутации (`invalidateQueries` по префиксу)
Точечное обновление кеша `setQueryData` для мгновенного отклика
Нормализация (`createEntityAdapter`, RTK Query теги) для общих сущностей
Серверные события (WebSocket, push) для изменений с других устройств
Сверка с сервером после оптимистичных изменений
Что могут спросить следом
- Как обновить элемент внутри бесконечного списка?
- Что делать, если изменение пришло по WebSocket?
Разбор
Образцовый ответ: «Главное, чтобы у сущности был один источник правды. С TanStack Query после мутации я точечно обновляю кеш деталей через setQueryData, чтобы экран отреагировал сразу, и инвалидирую связанные ключи: списки по префиксу ['orders'] и счётчики. Для бесконечного списка обновляю элемент внутри страниц data.pages, а не перезагружаю всю ленту. Если одна сущность встречается во многих местах, удобнее нормализованный стор: в RTK Query это теги providesTags и invalidatesTags. Изменения с других устройств приходят через WebSocket или push, и я обрабатываю их так же: обновляю или инвалидирую кеш. После оптимистичных изменений всегда сверяюсь с сервером»
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.