Навигация с React Router DOM v6

Сегодня мы покажем вам, как осуществлять навигацию в приложении React с помощью react-router-dom v6. При работе с react -router-dom v6 он отличается от маршрутизации v5.

Способы навигации с использованием react-router-dom v6

Link

Link является якорным тегом и используется для управления навигацией. Для демонстрации см. код ниже.

import { Link } from 'react-router-dom';
...
...
<Link to="/about">About</Link>

NavLink

Та же функциональность, что Link и у NavLink, но она также позволяет нам отображать ссылку как ту, которую пользователь в данный момент просматривает.

import { NavLink } from 'react-router-dom';
...
...
<NavLink className={({ isActive }) => isActive ? 'active' : ''} to="/about">About</NavLink>

Navigate компонент

Вы можете использовать <Navigate /> компонент для управления перенаправлением и использовать replace атрибут для перезаписи текущего местоположения в стеке истории.

import { BrowserRouter, Navigate, Route, Routes } from 'react-router-dom';
...
...
<BrowserRouter>
  <Routes>
    <Route path="/" element={<Home />} />
    <Route path="/about" element={<About />} />
    <Route
        path="*"
        element={<Navigate to="/" replace />}
    />
  </Routes>
</BrowserRouter>

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

Если вы хотите программно осуществлять навигацию с одной страницы на другую, то вам следует использовать useNavigate. Другими словами, можно сказать, что если вы хотите управлять перенаправлением при нажатии кнопки, то вы можете использовать его.

import { useNavigate } from "react-router-dom";
 
export default function Login() {
  let navigate = useNavigate();
 
  return (
    <button
      onClick={() => navigate("/dashboard")}
    >
      Login
    </button>
  );
}

Заменить текущее местоположение

Используйте replace атрибут для перезаписи местоположения в стеке истории.

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

Передать значение другому компоненту

Чтобы передать значение другому компоненту с помощью useNavigate().

navigate("/dashboard", { state: { id: 1, data: {...} } });

Теперь используйте useLocation() для считывания значения состояния.

import { useLocation } from "react-router-dom";
...
...
let location = useLocation();
console.log('Id: ', location.state.id);
console.log('Data: ', location.state.data);

Надеемся, эта статья окажется для вас полезной. Спасибо за прочтение. Удачного кодирования.