TanStack Router предоставляет мощный и гибкий способ управления маршрутами в приложениях на JavaScript и TypeScript, включая React. Hooks API является центральным инструментом для интеграции маршрутов с компонентами, позволяя подписываться на состояние маршрутов, работать с параметрами URL и осуществлять навигацию.
useRouter — основной хук для доступа к объекту роутера в
любом компоненте. Он возвращает экземпляр роутера с полным набором
методов и свойств:
import { useRouter } from '@tanstack/router';
function MyComponent() {
const router = useRouter();
function navigateToHome() {
router.navigate({ to: '/' });
}
return ;
}
Ключевые возможности useRouter:
router.navigate(options) — программная навигация.router.currentRoute — текущий активный маршрут.router.prefetch(options) — предзагрузка данных для
маршрута.useMatch позволяет получать объект маршрута и его
параметры для текущего URL. Этот хук особенно полезен для компонентов,
которые зависят от динамических сегментов пути.
import { useMatch } from '@tanstack/router';
const route = useMatch('/users/:userId');
console.log(route.params.userId);
Особенности:
params) и
query-параметров (searchParams).Для работы с параметрами URL существуют отдельные хуки:
useParams — получает динамические параметры маршрута:
import { useParams } from '@tanstack/router';
const { userId } = useParams();
useSearchParams — для query-параметров:
import { useSearchParams } from '@tanstack/router';
const [searchParams, setSearchParams] = useSearchParams();
const page = searchParams.get('page') ?? 1;
setSearchParams({ page: 2 });
Особенности:
useNavigate предоставляет удобный интерфейс для
программной навигации с поддержкой всех возможностей роутера:
import { useNavigate } from '@tanstack/router';
function NavigateButton() {
const navigate = useNavigate();
return (
);
}
Важные моменты:
to — путь маршрута или объект с маршрутными
параметрами.replace — заменяет текущий URL вместо добавления в
историю.scroll — контролирует поведение скролла при
навигации.Для загрузки данных на уровне маршрута используется
useRouteLoader. Этот хук позволяет компоненту подписаться
на загрузчик маршрута и получать данные с кешированием и
реактивностью.
import { useRouteLoader } from '@tanstack/router';
const userData = useRouteLoader({ routeId: 'userRoute' });
Преимущества:
prefetch).Хук useIsActive позволяет проверять, активен ли
конкретный маршрут или путь:
import { useIsActive } from '@tanstack/router';
const isActive = useIsActive({ to: '/profile' });
Особенности:
exact и
includeChildren.useRouter для глобальной навигации и
доступа к текущему состоянию роутера.useMatch или useParams.useRouteLoader для данных,
связанных с маршрутом, чтобы избежать дублирования запросов.useSearchParams с
локальным состоянием компонента для удобного управления
query-параметрами.Hooks API TanStack Router построен так, чтобы различные хуки можно было комбинировать:
function UserProfile() {
const { userId } = useParams();
const userData = useRouteLoader({ routeId: 'userRoute' });
const navigate = useNavigate();
if (!userData) return Loading...;
return (
{userData.name}
);
}
Это позволяет полностью разделять логику маршрутизации и логическую работу компонентов, обеспечивая чистоту и масштабируемость приложения.