TanStack Router предоставляет мощный API для программной навигации,
позволяя управлять переходами между страницами и состоянием маршрутов
без необходимости использования ссылок в JSX.
Основной инструмент для этого — функция navigate, которая
интегрируется с объектом маршрутизатора и обеспечивает гибкий контроль
над переходами.
navigateДля начала необходимо получить доступ к функции
navigate, которая предоставляется через хук
useNavigate в контексте React-приложения:
import { useNavigate } from '@tanstack/router';
function MyComponent() {
const navigate = useNavigate();
function handleClick() {
navigate({ to: '/dashboard' });
}
return ;
}
Ключевые моменты:
navigate всегда вызывается с объектом
конфигурации.to, которое указывает путь
маршрута.navigate можно использовать в обработчиках событий,
асинхронных функциях и эффектах.TanStack Router поддерживает маршруты с динамическими параметрами и
query-параметрами. При навигации эти значения можно передавать через
объект params и search:
navigate({
to: '/users/$userId',
params: { userId: '42' },
search: { tab: 'settings' }
});
params сопоставляет динамические сегменты маршрута с
конкретными значениями.search автоматически формирует query-параметры
(?tab=settings).Функция navigate поддерживает несколько дополнительных
опций, влияющих на поведение перехода:
replace — заменяет текущую запись в
истории вместо добавления новой:navigate({ to: '/login', replace: true });
state — позволяет передать состояние
для маршрута, доступное через useLocation().state:navigate({
to: '/profile',
state: { from: '/dashboard' }
});
from — определяет базовый маршрут,
относительно которого строится переход. Используется редко, но полезно
при сложной вложенной навигации.TanStack Router поддерживает асинхронные действия перед переходом. Например, можно дождаться завершения загрузки данных или проверки условий:
async function handleSave(data) {
await saveData(data);
navigate({ to: '/success' });
}
Это обеспечивает плавный и контролируемый переход между страницами.
Помимо прямого указания пути, TanStack Router позволяет использовать именованные маршруты для улучшения читаемости кода и поддержки рефакторинга:
const router = createRouter({
routes: [
{ path: '/dashboard', id: 'dashboard' },
{ path: '/users/$userId', id: 'userProfile' }
]
});
navigate({ to: 'userProfile', params: { userId: '42' } });
id маршрута используется вместо строки пути.TanStack Router поддерживает навигацию относительно текущего маршрута:
navigate({ to: '../settings' }); // переход на родительский маршрут + settings
navigate({ to: './edit' }); // переход на дочерний маршрут edit
. и .. позволяет создавать
динамичные вложенные интерфейсы.При работе с программной навигацией важно учитывать, что TanStack
Router управляет историей браузера и скроллом. Переход через
navigate по умолчанию прокручивает страницу вверх, но можно
управлять этим поведением через слушатели событий маршрутизатора или
собственные хендлеры:
navigate({
to: '/articles',
replace: false
});
Программная навигация часто используется вместе с авторизацией. TanStack Router позволяет проверять доступ перед переходом:
if (!user.isAuthenticated) {
navigate({ to: '/login', replace: true });
} else {
navigate({ to: '/dashboard' });
}
navigate вне компонентов ReactДля случаев, когда навигация требуется вне React-компонента
(например, в утилитах или сервисах), можно сохранять ссылку на объект
router и вызывать метод router.navigate
напрямую:
router.navigate({ to: '/home' });