javascript42
Главная
Все учебники
Блог
Учебник TanStack Router
Введение
Что такое TanStack Router
История и развитие библиотеки
Сравнение с другими решениями для роутинга
Установка и первоначальная настройка
Структура документации и как ею пользоваться
Основы работы с TanStack Router
Концепция файлового роутинга
Структура проекта и организация файлов
Базовая навигация между страницами
Компонент Router и его настройка
Типы маршрутов: статические и динамические
Вложенные маршруты и их иерархия
Корневой маршрут и его особенности
Конфигурация маршрутов
Определение маршрутов через файлы
Программное определение маршрутов
Параметры маршрутов
Параметры поиска (search params)
Параметры хеша
Опциональные сегменты пути
Wildcard-маршруты
Маршруты с несколькими параметрами
Приоритеты и порядок разрешения маршрутов
Навигация
Компонент Link и его использование
Программная навигация через navigate
Навигация с параметрами
Передача состояния при навигации
Относительная и абсолютная навигация
Навигация по истории: назад и вперед
Замена записей в истории
Предзагрузка маршрутов
Активные и точные совпадения ссылок
Стилизация активных ссылок
Загрузка данных
Loader-функции и их назначение
Определение loader для маршрута
Доступ к загруженным данным в компонентах
Параметры loader-функций
Контекст загрузки данных
Параллельная загрузка данных
Последовательная загрузка данных
Зависимости между loader'ами
Обработка ошибок при загрузке
Повторные запросы и обновление данных
Кеширование результатов loader'ов
Валидация и типизация
Валидация параметров маршрута
Валидация search params
Использование Zod для валидации
Использование Valibot для валидации
Пользовательские валидаторы
TypeScript и типобезопасность маршрутов
Автоматическая генерация типов
Типизация параметров и данных
Строгая типизация навигации
Поиск и фильтрация
Работа с query parameters
Управление состоянием поиска
Синхронизация URL и состояния формы
Сложные параметры поиска
Сериализация и десериализация параметров
Фильтры с множественными значениями
Pagination через URL
Сброс параметров поиска
История параметров поиска
Layouts и шаблоны
Концепция layout-компонентов
Создание переиспользуемых layouts
Вложенные layouts
Условные layouts
Outlet и рендеринг дочерних маршрутов
Общие элементы интерфейса
Передача данных в layouts
Изоляция состояния в layouts
Обработка ошибок
Типы ошибок в роутере
Error boundaries для маршрутов
Компонент ErrorComponent
Обработка ошибок загрузки данных
Обработка ошибок навигации
404 страницы и NotFound-компоненты
Fallback-компоненты
Логирование ошибок
Восстановление после ошибок
Pending-состояния и индикация загрузки
Отслеживание состояния загрузки
Индикаторы загрузки для маршрутов
Pending-компоненты
Глобальные индикаторы загрузки
Скелетоны и placeholder'ы
Transitions между маршрутами
Задержки перед показом loader'ов
Управление pending-состоянием
Хуки и утилиты
useNavigate для программной навигации
useParams для доступа к параметрам
useSearch для работы с query params
useLoaderData для получения загруженных данных
useRouter для доступа к инстансу роутера
useRouterState для чтения состояния
useMatches для информации о совпадениях
useLocation для данных о текущем location
useMatch для проверки активного маршрута
Пользовательские хуки на основе встроенных
Продвинутая навигация
Модальные окна через роутинг
Параллельные маршруты
Intercepting routes
Навигация с анимациями
Scroll restoration
Управление скроллом
Focus management при навигации
Блокировка навигации
Подтверждение ухода со страницы
Аутентификация и защита маршрутов
Концепция защищенных маршрутов
Проверка авторизации в loader'ах
Редиректы для неавторизованных пользователей
Middleware для маршрутов
Контекст аутентификации
Роли и права доступа
Защита вложенных маршрутов
Сохранение redirect URL
Контекст роутера
Что такое router context
Создание и использование контекста
Передача данных через контекст
Глобальный контекст приложения
Контекст для конкретных маршрутов
Зависимости в контексте
Типизация контекста
Лучшие практики работы с контекстом
Код-сплиттинг и ленивая загрузка
Lazy loading компонентов маршрутов
Динамический импорт маршрутов
Route-based code splitting
Prefetching маршрутов
Оптимизация размера бандла
Стратегии загрузки
Обработка ошибок при ленивой загрузке
Fallback при загрузке чанков
Server-side rendering
Настройка SSR с TanStack Router
Гидратация на клиенте
Передача данных с сервера на клиент
Loader'ы на сервере
Обработка навигации на сервере
Streaming SSR
Критические данные и их приоритизация
SEO-оптимизация через SSR
Интеграция с фреймворками
TanStack Router и React
Использование с Vite
Настройка с Webpack
Интеграция с Next.js
Работа с Remix
Использование с Create React App
Настройка с другими сборщиками
Интеграция с библиотеками управления состоянием
TanStack Router и TanStack Query
Синхронизация с Redux
Интеграция с Zustand
Работа с Jotai
Использование с MobX
Координация состояния роутера и store
Тестирование
Стратегии тестирования роутинга
Мокирование роутера в тестах
Тестирование компонентов с навигацией
Тестирование loader-функций
Тестирование редиректов
Интеграционное тестирование навигации
E2E-тестирование маршрутов
Тестирование защищенных маршрутов
Производительность и оптимизация
Профилирование роутинга
Оптимизация loader'ов
Мемоизация данных маршрутов
Уменьшение ререндеров
Стратегии предзагрузки
Отложенная загрузка некритичных данных
Throttling и debouncing навигации
Миграция и совместимость
Миграция с React Router
Переход с других роутеров
Постепенная миграция
Совместимость версий
Breaking changes между версиями
Стратегии обновления
Отладка и DevTools
Инструменты разработчика для роутера
Логирование навигации
Инспектирование состояния роутера
Отладка loader'ов
Трейсинг маршрутов
Визуализация дерева маршрутов
Проверка типов в рантайме
Расширенные паттерны и архитектура
Организация крупных приложений
Модульная структура маршрутов
Feature-based routing
Domain-driven routing
Микрофронтенды и роутинг
Динамическая регистрация маршрутов
Плагины и расширения роутера
API Reference
Router API
Route API
Link API
Loader API
Validator API
Hooks API
Типы и интерфейсы
Утилитарные функции