advanced
Инвалидация кэша
Связывайте записи с затронутыми кэшированными чтениями через keys, tags, граф зависимостей и правила свежести продукта.
Инвалидация связывает записи с затронутыми чтениями. Стратегии: инвалидация по префиксу ключа, точное совпадение, граф тегов (RTK Query) или ручной `setQueryData`, когда известна следующая форма.
// После создания поста — инвалидировать список и положить detail в кэш
queryClient.invalidateQueries({ queryKey: ['posts'] });
queryClient.setQueryData(['posts', newPost.id], newPost);
| Стратегия | Когда | |-----------|-------| | Широкая инвалидация | Простые приложения; терпим refetch | | Точечные ключи | Известны только затронутые queries | | setQueryData | Ответ сервера совпадает с формой кэша | | Optimistic + rollback | Чувствительный к latency UX |
Правила продукта задают свежесть: дашборды могут poll; справочники — минуты; пользовательские данные refetch при навигации.
Компромисс: свежие чтения после записей против лишних запросов при слишком широкой инвалидации.
На интервью: «самая сложная проблема» — назовите схему key/tag до кода mutations.
Типовые ошибки: invalidate всего на каждый POST, устаревший detail после update списка, гонка refetch с optimistic UI.
Чеклист:
- Документируйте иерархию ключей и зависимости.
- Инвалидируйте минимально достаточный набор.
- Обновляйте кэш напрямую, если ответ авторитетен.
- Тестируйте параллельные mutations и сбои.