useNavigate — это хук библиотеки TanStack Router,
который предоставляет механизм для программного управления навигацией
внутри приложения. Он заменяет необходимость прямого взаимодействия с
<Link> и позволяет управлять переходами динамически,
исходя из состояния приложения, данных пользователя или других
условий.
Для начала необходимо импортировать хук из библиотеки:
import { useNavigate } from '@tanstack/router';
После этого useNavigate можно использовать внутри
функционального компонента:
function MyComponent() {
const navigate = useNavigate();
const goToHome = () => {
navigate({ to: '/home' });
};
return (
<button onCl ick={goToHome}>Перейти на главную</button>
);
}
В этом примере navigate принимает объект с ключом
to, который указывает путь маршрута. Это минимальный
синтаксис, позволяющий выполнять переходы между страницами.
navigateФункция navigate поддерживает несколько полезных
опций:
to — обязательное поле, путь маршрута или объект
маршрута.replace — если установлено true, переход
заменяет текущую запись в истории, а не добавляет новую.state — объект состояния, который можно передать
маршруту, аналог location.state в обычных
маршрутизаторах.search — объект или строка с параметрами query.Пример использования всех опций:
navigate({
to: '/profile',
replace: true,
state: { referrer: 'dashboard' },
search: { tab: 'settings' }
});
Этот вызов заменяет текущий маршрут на /profile,
передает состояние и добавляет query-параметр
?tab=settings.
TanStack Router поддерживает маршруты с динамическими сегментами, и
useNavigate легко позволяет переходить к таким
маршрутам:
const navigate = useNavigate();
const userId = 42;
navigate({
to: '/users/$userId',
params: { userId }
});
Ключевой момент: для динамических сегментов путь задается с
$, а значения передаются через объект params.
Это гарантирует корректное формирование URL без ручной подстановки
строк.
Часто требуется навигация после выполнения асинхронной операции или проверки условия:
async function handleLogin(credentials) {
const success = await api.login(credentials);
if (success) {
navigate({ to: '/dashboard' });
} else {
navigate({ to: '/login', state: { error: 'Неверный логин или пароль' } });
}
}
Такой подход позволяет централизованно управлять логикой переходов,
минимизируя дублирование <Link> компонентов в
шаблонах.
Опция replace позволяет интегрировать
useNavigate с историей браузера, управляя стеком
переходов:
replace: true — переход заменяет текущую запись.replace: false (по умолчанию) — переход добавляется в
стек истории.Пример:
navigate({ to: '/settings', replace: true });
Это удобно для редиректов после авторизации, когда не требуется возможность возврата на страницу входа кнопкой «Назад».
useNavigate позволяет легко реализовать возврат на
предыдущий маршрут через отрицательное значение:
navigate({ to: -1 });
Здесь -1 соответствует аналогии с
history.back(). Также можно указать другие отрицательные
числа для возврата на несколько шагов назад.
С помощью useNavigate можно управлять query-параметрами
и состоянием маршрута без перезагрузки страницы:
navigate({
to: '/search',
search: { q: 'tanstack', page: 2 },
state: { from: 'homepage' }
});
В этом примере URL автоматически преобразуется в
/search?q=tanstack&page=2, а объект состояния доступен
на целевой странице через useLocation или аналогичные API
TanStack Router.
Для более сложных сценариев, например после сохранения данных на
сервере, можно комбинировать useNavigate с колбэками:
function handleSubmit(formData) {
api.saveData(formData).then(response => {
navigate({ to: `/results/${response.id}` });
});
}
Это обеспечивает плавный пользовательский опыт, где навигация происходит автоматически после успешного завершения операций.
useNavigate отлично интегрируется с TypeScript благодаря
строгой типизации маршрутов:
const navigate = useNavigate<MyRoutes>();
navigate({ to: 'profile', params: { userId: 10 } });
Типизация помогает избежать ошибок передачи неверных параметров и обеспечивает автодополнение в IDE.
params.replace и отрицательные
значения.Эти возможности делают useNavigate мощным инструментом
для создания гибких и динамичных маршрутов в приложениях на TanStack
Router.