В TanStack Router параметры маршрутов используются для передачи динамических значений через URL и позволяют строить гибкую навигацию без необходимости повторной отрисовки компонентов на уровне всего приложения. Параметры делятся на path parameters и search parameters.
Path parameters (параметры пути) определяются в
маршруте через двоеточие :. Они позволяют создавать
маршруты с переменными сегментами.
Пример маршрута с path parameter:
import { createRouter, Route } from '@tanstack/router';
const userRoute = new Route({
path: '/users/:userId',
component: UserProfile,
});
:userId – динамическая часть URL.useParams():import { useParams } from '@tanstack/router';
function UserProfile() {
const { userId } = useParams();
return <div>Пользователь с ID: {userId}</div>;
}
Особенности path parameters:
:, является обязательным. Если значение
отсутствует, маршрут не совпадает.const userRoute = new Route<{ userId: string }>({
path: '/users/:userId',
component: UserProfile,
});
Search parameters (параметры поиска) передаются
через строку запроса, после ? в URL. В TanStack Router они
определяются через объект searchSchema при создании
маршрута:
import { z } from 'zod';
const searchRoute = new Route({
path: '/products',
component: ProductsPage,
searchSchema: z.object({
category: z.string().optional(),
page: z.number().default(1),
}),
});
searchSchema использует Zod для
валидации и приведения типов.useSearchParams():import { useSearchParams } from '@tanstack/router';
function ProductsPage() {
const { category, page } = useSearchParams();
return <div>Категория: {category}, Страница: {page}</div>;
}
Особенности search parameters:
default.searchParams автоматически обновляют URL без полной
перезагрузки страницы.Вложенные маршруты могут наследовать параметры от родителя:
const userRoute = new Route({
path: '/users/:userId',
component: UserLayout,
});
const userSettingsRoute = new Route({
path: 'settings',
parent: userRoute,
component: UserSettings,
});
UserSettings доступны все параметры родителя
(userId) через useParams()./users/:userId/settings.Для перехода к маршруту с параметрами используется
router.navigate():
router.navigate({
to: '/users/:userId',
params: { userId: '123' },
search: { tab: 'activity' },
});
params – объект для path parameters.search – объект для search parameters.Некорректные или отсутствующие параметры можно обрабатывать через
validate функцию или через searchSchema:
const userRoute = new Route({
path: '/users/:userId',
component: UserProfile,
validate: ({ params }) => {
if (!/^\d+$/.test(params.userId)) {
return { redirectTo: '/users' };
}
},
});
validate позволяет проверять значения path parameters и
перенаправлять пользователя при ошибке.Можно комбинировать несколько path и search parameters:
const blogRoute = new Route({
path: '/blogs/:blogId/posts/:postId',
component: BlogPost,
searchSchema: z.object({
highlight: z.boolean().optional(),
}),
});
const { blogId, postId } = useParams();
const { highlight } = useSearchParams();
validate или searchSchema, чтобы избежать
ошибок рендеринга.Понимание структуры и правильная работа с параметрами маршрутов является ключевым для построения масштабируемых приложений на TanStack Router, где URL отражает состояние приложения и его данные.