Dev Highlights

Доки по разработке

This project is maintained by teniryte

15. Realtime, мультивкладочность и experimental API

Финальная глава собирает возможности, которые нужны не каждому проекту, но важны для современного production-стека.

Realtime через WebSocket/SSE

Базовый подход:

socket.on('todo.updated', (todo: Todo) => {
  queryClient.setQueryData(['todos', 'detail', todo.id], todo)
  queryClient.invalidateQueries({ queryKey: ['todos', 'list'] })
})

Это лучше, чем принудительный polling для каждого чиха.

Когда писать в кеш, а когда инвалидировать

Пишите в кеш, если:

Инвалидируйте, если:

Мультивкладочность: broadcastQueryClient

Официальный experimental plugin для синхронизации кеша между вкладками:

import { QueryClient } from '@tanstack/react-query'
import { broadcastQueryClient } from '@tanstack/query-broadcast-client-experimental'

const queryClient = new QueryClient()

broadcastQueryClient({
  queryClient,
  broadcastChannel: 'my-app',
})

Что важно:

Полезно для:

Experimental streaming: experimental_streamedQuery

В актуальной экосистеме есть experimental helper для потоковых данных из AsyncIterable.

Идея:

Это полезно для:

Но это experimental-функциональность, поэтому включайте её осознанно.

usePrefetchQuery и usePrefetchInfiniteQuery

Это уже не experimental, а современный API для prefetch-before-suspense.

Их стоит помнить как отдельный класс инструментов:

Где проходит граница “можно” и “не стоит”

Используйте experimental API, если:

Не спешите использовать, если:

Финальные best practices