Сетевой статус в TanStack Query определяет текущее состояние подключения клиента к сети и напрямую влияет на поведение запросов: выполнение, повторные попытки, отложенные мутации и автоматические рефетчи. Библиотека рассматривает сетевой статус не как вспомогательную метрику, а как фундаментальный сигнал, от которого зависят стратегии доставки и синхронизации данных.
В основе лежит абстракция, позволяющая разделить работу с данными на два режима: когда сеть доступна и когда она недоступна. Это разделение критично для корректного управления кэшем, предотвращения лишних запросов и обеспечения предсказуемого поведения приложения при потере соединения.
TanStack Query использует несколько уровней определения онлайн-состояния:
Основной источник информации о сети — встроенное браузерное свойство:
navigator.onLine
Это значение:
true — браузер считает себя подключеннымfalse — браузер считает соединение отсутствующимОднако это значение не гарантирует фактическую доступность сервера. Оно отражает лишь наличие сетевого интерфейса или системного подключения, поэтому рассматривается как эвристика, а не строгая истина.
TanStack Query инкапсулирует логику сетевого статуса в
onlineManager. Он отвечает за:
Базовая реализация опирается на события браузера:
window.addEventListener('online', handler)
window.addEventListener('offline', handler)
При срабатывании этих событий состояние синхронизируется с
navigator.onLine, после чего происходит уведомление всех
активных query и mutation процессов.
Система подписки реализована через реактивную модель: любые изменения сетевого статуса транслируются в QueryCache и QueryObserver.
Основные сценарии реакции:
Внутренне это реализуется через механизм listeners:
onlineManager.subscribe(() => {
queryClient.resumePausedMutations()
queryClient.refetchQueries({
type: 'active',
stale: true,
})
})
При потере соединения TanStack Query:
Важно, что кэш продолжает оставаться доступным, и чтение данных не блокируется.
При восстановлении сети:
Этот механизм делает систему самовосстанавливающейся без необходимости ручного вмешательства.
Одним из ключевых параметров, связанных с сетевым статусом, является:
refetchOnReconnect
Он определяет поведение при восстановлении соединения:
true — автоматический рефетч активных запросовfalse — сохранение текущего состояния без
обновленияalways — принудительное обновление независимо от
stale-состоянияПример конфигурации:
const queryClient = new QueryClient({
defaultOptions: {
queries: {
refetchOnReconnect: true,
},
},
})
Retry механика тесно связана с сетевым статусом. При offline-состоянии TanStack Query может:
Базовая логика выглядит как комбинация:
retry: (failureCount, error) => {
if (!navigator.onLine) return false
return failureCount < 3
}
Хотя focusManager напрямую не управляет сетью, он часто работает совместно с onlineManager.
Поведение:
focusManager.setEventListener(handleFocus => {
window.addEventListener('visibilitychange', () => {
handleFocus(document.visibilityState === 'visible')
})
})
TanStack Query вводит параметр networkMode, который
определяет поведение запросов в зависимости от сетевого состояния.
Запросы выполняются только при наличии соединения. При offline они приостанавливаются.
Запросы выполняются независимо от сетевого статуса. Используется в специфических сценариях, где кэш или промежуточные слои могут буферизовать данные.
Сначала используется кэш, затем при наличии сети выполняется синхронизация.
Пример:
const queryClient = new QueryClient({
defaultOptions: {
queries: {
networkMode: 'online',
},
},
})
Мутации в TanStack Query имеют собственную модель поведения при изменении сети.
Если сеть недоступна:
После возвращения сети:
resumePausedMutations()Это обеспечивает согласованность данных даже при нестабильном соединении.
В некоторых приложениях стандартного navigator.onLine
недостаточно. TanStack Query позволяет переопределить логику определения
сети:
import { onlineManager } from '@tanstack/query-core'
onlineManager.setEventListener(setOnline => {
const ws = new WebSocket('wss://example.com/ping')
ws.ono pen = () => setOnline(true)
ws.oncl ose = () => setOnline(false)
})
Такой подход используется для:
Сетевой статус не влияет напрямую на содержимое кэша, но влияет на:
Кэш остается источником синхронного состояния, а сеть — механизмом актуализации.
Поведение можно описать как разделение:
При нестабильной сети TanStack Query обеспечивает:
Особенно важно поведение при:
После перехода в online система выполняет последовательность:
Эта последовательность обеспечивает согласованность состояния приложения без ручной координации.