Программная навигация

Программная навигация — это способ изменять текущий URL и переключать экраны не через клик по <Link>, а из кода компонента. Это необходимо, когда переход должен происходить в ответ на действие пользователя (например, отправка формы) или системное событие (например, успешная авторизация).

Хук useNavigate()

Для программной навигации в React Router v6 используется хук useNavigate(). Он возвращает функцию, которую можно вызвать для перехода на другой маршрут.

import { useNavigate } from 'react-router-dom';

function LoginPage() {
  const navigate = useNavigate();

  const handleLogin = () => {
    // имитация успешной авторизации
    navigate('/dashboard');
  };

  return (
    <button onClick={handleLogin}>
      Войти
    </button>
  );
}

Основные сценарии использования

Переход на новый путь

navigate('/profile');

Добавляет новую запись в историю браузера (как обычный клик по ссылке).

Замена текущей записи в истории

navigate('/home', { replace: true });

Полезно после логина или логаута, чтобы пользователь не мог вернуться назад на страницу входа кнопкой «Назад».

Возврат назад

navigate(-1);

Аналог кнопки «Назад» в браузере. Можно также использовать navigate(1) для перехода вперёд.

Когда использовать

  • После успешной отправки формы (например, создания заказа);
  • При автоматическом перенаправлении (например, если пользователь не авторизован);
  • В обработчиках ошибок (например, переход на страницу 404 при отсутствии данных);
  • В модальных окнах или всплывающих уведомлениях, где нет возможности использовать <Link>.

Ограничения

Функция navigate должна вызываться только внутри компонента, обёрнутого в <BrowserRouter>. Вызов вне дерева маршрутизации приведёт к ошибке.

Также не рекомендуется вызывать navigate напрямую в теле компонента (на этапе рендеринга), так как это может вызвать побочные эффекты. Используйте его только в обработчиках событий или внутри useEffect при определённых условиях.