TanStack Router предоставляет гибкий и мощный способ работы с маршрутами, включая поддержку нескольких параметров. Параметры маршрута позволяют динамически изменять отображаемый контент на основе URL, создавая возможность для построения сложных и интерактивных интерфейсов.
Для создания маршрута с несколькими параметрами необходимо
использовать синтаксис с двоеточиями (:) в пути маршрута.
Например:
import { createRouter, Route } from '@tanstack/router';
const userRoute = new Route({
path: '/users/:userId/posts/:postId',
component: UserPost,
});
В этом примере маршрут включает два параметра: userId и
postId. При переходе по URL
/users/42/posts/100 значения параметров будут
userId = 42 и postId = 100.
Параметры маршрута доступны через объект params, который
предоставляется компоненту маршрута.
function UserPost({ params }) {
return (
<div>
<h2>Пользователь: {params.userId}</h2>
<p>Пост: {params.postId}</p>
</div>
);
}
Параметры автоматически извлекаются из URL и обновляются при навигации, что обеспечивает реактивность компонентов.
TanStack Router поддерживает вложенные маршруты, где каждый уровень может иметь свои параметры. Например:
const appRouter = createRouter({
routes: [
new Route({
path: '/users/:userId',
component: UserProfile,
children: [
new Route({
path: 'posts/:postId',
component: UserPost,
}),
],
}),
],
});
В этом случае параметры верхнего уровня (userId)
доступны и для дочернего маршрута UserPost, что позволяет
использовать их совместно:
function UserPost({ params }) {
console.log(params.userId); // параметр родителя
console.log(params.postId); // параметр текущего маршрута
return <div>Пользователь {params.userId}, Пост {params.postId}</div>;
}
Для перехода к маршруту с несколькими параметрами можно использовать
объект navigate с указанием значений всех параметров:
router.navigate('/users/:userId/posts/:postId', {
params: { userId: '42', postId: '100' },
});
Это гарантирует корректное формирование URL независимо от текущего контекста маршрута.
TanStack Router позволяет определять параметры как опциональные,
добавляя знак ? в пути:
new Route({
path: '/users/:userId/posts/:postId?',
component: UserPost,
});
В этом случае маршрут будет работать как с URL
/users/42/posts, так и с /users/42/posts/100.
Параметр postId в первом случае будет
undefined, что позволяет динамически адаптировать
отображение компонента.
Для сложных приложений важно валидировать и преобразовывать параметры
перед использованием. В TanStack Router это делается через функции
parseParams и validateParams:
new Route({
path: '/users/:userId/posts/:postId',
component: UserPost,
parseParams: ({ userId, postId }) => ({
userId: Number(userId),
postId: Number(postId),
}),
validateParams: ({ userId, postId }) =>
Number.isInteger(userId) && Number.isInteger(postId),
});
Функции позволяют гарантировать, что параметры соответствуют ожидаемому типу, предотвращая ошибки при рендеринге компонентов.
Параметры маршрута удобно сочетать с query-параметрами и состоянием маршрута. Например:
router.navigate('/users/:userId/posts/:postId', {
params: { userId: '42', postId: '100' },
search: { filter: 'latest' },
state: { scrollPosition: 0 },
});
Такой подход позволяет передавать дополнительные данные, которые не входят в URL-параметры, но важны для состояния интерфейса.
: в пути маршрута.params.params.? и могут быть
undefined.Использование этих возможностей TanStack Router позволяет создавать маршруты с высокой гибкостью, точным контролем параметров и эффективной навигацией между динамическими страницами.