TanStack Router — это современный роутер для JavaScript-приложений, построенный с акцентом на декларативное описание маршрутов и мощную работу с асинхронными данными. В основе работы лежит концепция маршрутного дерева, где каждый маршрут — это объект с набором свойств, определяющих путь, параметры, вложенные маршруты и асинхронные данные.
Ключевые элементы маршрута:
:param.Маршруты строятся декларативно, что позволяет легко управлять сложными иерархиями.
import { createRouter, RouterProvider } from '@tanstack/router';
import Home from './pages/Home';
import Profile from './pages/Profile';
import Settings from './pages/Settings';
const router = createRouter({
routes: [
{
path: '/',
component: Home,
children: [
{
path: 'profile/:userId',
component: Profile,
loader: async ({ params }) => {
const response = await fetch(`/api/users/${params.userId}`);
return response.json();
},
},
{
path: 'settings',
component: Settings,
},
],
},
],
});
Особенности структуры маршрутов:
:userId) автоматически
передаются в loader и компонент через хук
useParams().loader можно выполнять асинхронные запросы, и
TanStack Router гарантирует, что данные будут доступны до рендера
компонента.Для асинхронной загрузки данных TanStack Router использует
loader и useLoaderData().
import { useLoaderData } from '@tanstack/router';
function Profile() {
const data = useLoaderData();
return (
<div>
<h1>{data.name}</h1>
<p>{data.email}</p>
</div>
);
}
Ключевые моменты:
loader вызывается до рендера компонента, предотвращая
показ пустого состояния.loader на разных уровнях
маршрута, что позволяет создавать сложные страницы с многослойными
данными.TanStack Router предоставляет удобные средства для навигации и контроля истории браузера:
import { Link, useNavigate } from '@tanstack/router';
function Menu() {
const navigate = useNavigate();
return (
<div>
<Link to="/">Главная</Link>
<button onCl ick={() => navigate('/settings')}>Настройки</button>
</div>
);
}
Особенности:
Каждый маршрут может содержать объект meta для хранения
пользовательских данных:
{
path: 'admin',
component: AdminPanel,
meta: {
requiresAuth: true,
roles: ['admin'],
},
}
onBeforeRoute) для авторизации и редиректов.Иерархическая структура маршрутов упрощает управление сложными интерфейсами:
const routes = [
{
path: '/',
component: Layout,
children: [
{ path: 'dashboard', component: Dashboard },
{ path: 'reports', component: Reports },
],
},
];
Layout) может рендерить общие
элементы интерфейса, например навигацию и sidebar.<Outlet />,
создавая динамическую область рендера.TanStack Router предоставляет встроенные возможности для отладки:
Эта структура документации демонстрирует системный подход TanStack Router: маршруты описываются декларативно, данные асинхронно подгружаются, вложенные маршруты строят иерархию интерфейса, а метаданные обеспечивают гибкую настройку и контроль доступа.