javascript42
Главная
Все учебники
Блог
Учебник RTK Query
Введение в RTK Query
Что такое RTK Query и зачем он нужен
Основные преимущества перед другими решениями
Установка и настройка окружения
Зависимости и требования к проекту
Базовые концепции
Архитектура RTK Query
Endpoints и их типы
Query endpoints
Mutation endpoints
Кэширование и инвалидация данных
Автоматическая повторная выборка
Жизненный цикл запроса
Создание API слайса
Функция createApi
Параметр baseQuery
Определение endpoints
Типизация запросов и ответов
Трансформация данных с помощью transformResponse
Обработка ошибок с помощью transformErrorResponse
Работа с Query
Основы использования useQuery
Параметры и опции хука
Состояния запроса: loading, error, success
Автоматическая подписка и отписка
Ручное управление запросами с помощью useLazyQuery
Предварительная загрузка данных
Polling и рефетчинг
Работа с Mutations
Основы использования useMutation
Отправка данных на сервер
Оптимистичные обновления
Инвалидация кэша после мутации
Ручное обновление кэша
Последовательные мутации
Кэширование
Принципы работы кэша в RTK Query
Теги и их использование
Стратегии инвалидации кэша
Время жизни кэша
Управление размером кэша
Принудительная очистка кэша
Кэширование на уровне компонентов
Провайды и теги
Система тегов для управления кэшем
providesTags в query endpoints
invalidatesTags в mutation endpoints
Динамические теги
Условная инвалидация
Оптимизация использования тегов
Настройка baseQuery
Стандартный fetchBaseQuery
Конфигурация базового URL
Добавление заголовков
Обработка токенов авторизации
Кастомные baseQuery функции
Retry логика
Преобразование запросов
Аутентификация и авторизация
Добавление токенов к запросам
Обновление токенов при истечении
Перехват 401 ошибок
Интеграция с Redux для хранения токенов
Защищенные endpoints
Logout и очистка данных
Продвинутые паттерны
Conditional fetching
Зависимые запросы
Параллельные запросы
Пагинация
Бесконечная прокрутка
Нормализация данных
Связанные сущности
Code Splitting
Динамическое добавление endpoints
injectEndpoints
Lazy загрузка API слайсов
Организация кода в больших приложениях
Оптимизация производительности
Мемоизация селекторов
Выборочная подписка на данные
Минимизация ререндеров
Использование selectFromResult
Debouncing и throttling запросов
Профилирование и отладка
Работа с WebSocket
Интеграция с WebSocket соединениями
Реалтайм обновления кэша
Подписки на события
Обработка переподключений
Серверный рендеринг
RTK Query в SSR приложениях
Предзагрузка данных на сервере
Гидратация состояния
Next.js интеграция
Обработка ошибок на сервере
Тестирование
Юнит-тестирование API слайсов
Мокирование запросов
Тестирование компонентов с RTK Query
Интеграционное тестирование
Тестирование кэширования и инвалидации
Использование MSW для моков
Отладка и DevTools
Redux DevTools для RTK Query
Инспектирование состояния кэша
Отслеживание запросов
Логирование и мониторинг
Обработка ошибок в production
Миграция и интеграция
Миграция с Redux Thunk
Миграция с Redux Saga
Интеграция с существующим Redux store
Постепенный переход на RTK Query
Совместное использование с другими решениями
TypeScript
Полная типизация API
Генерация типов из схемы
Типизация endpoints
Инференс типов
Продвинутые типы для трансформаций
Обработка ошибок с типами
Генерация кода
RTK Query Codegen
Генерация из OpenAPI спецификации
Генерация из GraphQL схемы
Настройка генератора
Кастомизация шаблонов
Лучшие практики
Организация структуры проекта
Именование endpoints и тегов
Разделение API слайсов
Обработка ошибок
Управление состоянием загрузки
Оптимальное использование кэша
Документирование API
Расширенная конфигурация
Middleware и enhancers
Кастомизация поведения RTK Query
Интеграция с внешними сервисами
Логирование и аналитика
Обработка специфичных кейсов
Производственное использование
Оптимизация bundle size
Управление версиями API
Обработка breaking changes
Мониторинг и метрики
Стратегии деплоя