В библиотеке TanStack Router хук
useParams используется для получения динамических
параметров маршрута. Он является ключевым инструментом для работы с
URL-параметрами, позволяя компонентам получать актуальные значения без
необходимости вручную извлекать их из объекта location или
history.
useParamsХук useParams возвращает объект, где ключи соответствуют
именам параметров, определённых в маршруте. Например, маршрут может
содержать динамический сегмент:
import { createRouter, Route, useParams } from '@tanstack/router';
const userRoute = new Route({
path: '/users/:userId',
component: () => {
const params = useParams();
return <div>ID пользователя: {params.userId}</div>;
},
});
В этом примере, если пользователь переходит по адресу
/users/42, useParams вернёт объект
{ userId: '42' }.
Ключевые моменты:
path маршрута.Маршруты могут содержать несколько динамических сегментов:
const postRoute = new Route({
path: '/users/:userId/posts/:postId',
component: () => {
const { userId, postId } = useParams();
return (
<div>
Пользователь: {userId}, Пост: {postId}
</div>
);
},
});
Здесь useParams возвращает объект
{ userId, postId }. При переходе на
/users/5/posts/12 значения будут userId = '5'
и postId = '12'.
Для проектов на TypeScript важно правильно типизировать возвращаемый объект. TanStack Router поддерживает строгую типизацию параметров маршрута через интерфейсы:
interface UserParams {
userId: string;
}
const userRoute = new Route<UserParams>({
path: '/users/:userId',
component: () => {
const params = useParams<UserParams>();
return <div>{params.userId}</div>;
},
});
Типизация позволяет получать автодополнение и предотвращает ошибки доступа к несуществующим ключам.
В TanStack Router можно определять необязательные параметры маршрута,
используя знак вопроса в пути (:param?):
const searchRoute = new Route({
path: '/search/:query?',
component: () => {
const { query } = useParams();
return <div>Результаты поиска: {query ?? 'все'}</div>;
},
});
Если параметр отсутствует в URL, useParams возвращает
undefined. Это позволяет безопасно устанавливать значения
по умолчанию через оператор ??.
Хук useParams создаёт реактивное состояние. При
изменении URL компонента автоматически получает новые значения
параметров без перезагрузки страницы:
const userRoute = new Route({
path: '/users/:userId',
component: () => {
const { userId } = useParams();
React.useEffect(() => {
console.log('Параметр userId изменился:', userId);
}, [userId]);
return <div>ID: {userId}</div>;
},
});
Этот механизм позволяет строить динамические страницы, которые реагируют на изменение маршрута без дополнительных усилий.
В сложных приложениях часто используются вложенные маршруты.
useParams возвращает все параметры, определённые в текущем
маршруте и его родительских:
const appRoute = new Route({
path: '/',
children: [
new Route({
path: 'users/:userId/posts/:postId',
component: () => {
const params = useParams();
return <div>{JSON.stringify(params)}</div>;
},
}),
],
});
При переходе на /users/7/posts/21 объект
params будет содержать
{ userId: '7', postId: '21' }. Это упрощает доступ к
параметрам для вложенных компонентов без необходимости передачи их через
пропсы.
const userId = Number(params.userId).undefined.?? для установки
значений по умолчанию.useParams в TanStack Router является мощным инструментом
для работы с динамическими маршрутами, позволяя компонентам легко
получать и реагировать на параметры URL, поддерживая при этом строгую
типизацию и реактивность.