В TanStack Router опциональные сегменты пути позволяют создавать маршруты, где часть пути может быть необязательной. Это удобно для реализации гибких URL-структур, таких как фильтры, категории или дополнительные параметры поиска, которые не всегда присутствуют в адресной строке.
Опциональный сегмент обозначается квадратными скобками
[]. Например:
const route = {
path: '/products/[category]',
component: ProductList,
};
В этом примере сегмент category является необязательным.
Это означает, что маршрут будет совпадать как с /products,
так и с /products/electronics.
Ключевые моменты синтаксиса:
undefined
в объекте params.const route = {
path: '/products/[category]/[brand]',
component: ProductList,
};
Такой маршрут совпадает с:
/products/products/electronics/products/electronics/appleОпциональные параметры передаются в компонент через объект
params:
function ProductList({ params }) {
const { category, brand } = params;
if (category) {
console.log(`Фильтруем по категории: ${category}`);
}
if (brand) {
console.log(`Фильтруем по бренду: ${brand}`);
}
return <div>Список продуктов</div>;
}
Если пользователь перейдёт на /products, оба параметра
будут undefined. При переходе на
/products/electronics параметр category будет
"electronics", а brand останется
undefined.
TanStack Router поддерживает вложенные маршруты с опциональными сегментами. Это позволяет строить иерархию маршрутов с гибкой структурой:
const routes = [
{
path: '/dashboard',
children: [
{
path: '[section]',
component: DashboardSection,
},
],
},
];
Здесь маршрут /dashboard доступен без
section, а /dashboard/analytics передаст
"analytics" в параметр section.
При генерации URL с помощью функции router.buildPath или
аналогичных методов, необязательные параметры можно пропускать. Если
параметр не указан, сегмент автоматически опускается:
const path1 = router.buildPath('/products/[category]/[brand]', {});
// результат: '/products'
const path2 = router.buildPath('/products/[category]/[brand]', { category: 'electronics' });
// результат: '/products/electronics'
const path3 = router.buildPath('/products/[category]/[brand]', { category: 'electronics', brand: 'apple' });
// результат: '/products/electronics/apple'
/products/[category]/details будет корректным, но
/products/[category]/details/[id] может требовать
тщательной обработки, если category отсутствует.const route = {
path: '/shop/[category]/[brand]/[priceRange]',
component: Shop,
};
Пользователь может перейти на /shop,
/shop/electronics, /shop/electronics/apple,
/shop/electronics/apple/100-500. Все параметры будут
доступны в params по мере их присутствия.
const route = {
path: '/profile/[tab]',
component: ProfilePage,
};
tab может быть "posts",
"settings" или отсутствовать. Это позволяет использовать
единый компонент для разных представлений профиля.
const route = {
path: '/docs/[section]/[subsection]',
component: DocsPage,
};
Если section или subsection не указаны,
пользователь попадает на общий список документов.
Опциональные сегменты пути в TanStack Router делают маршрутизацию гибкой и позволяют строить чистые URL без дублирования компонентов и логики. Они интегрируются с параметрами, nested routes и генерацией URL, обеспечивая мощный инструмент для построения динамических веб-приложений.