Компонент Link предназначен для создания навигационных
ссылок в приложениях на React, использующих React Router. Он
обеспечивает управление маршрутизацией без полной перезагрузки страницы,
что позволяет сохранять состояние приложения и обеспечивать плавный
переход между различными представлениями.
Для работы с Link необходимо импортировать его из пакета
react-router-dom:
import { Link } from 'react-router-dom';
Создание простой ссылки выглядит следующим образом:
<Link to="/about">О сайте</Link>
Здесь атрибут to указывает путь, на который должен быть
выполнен переход. Он может быть строкой или объектом с более детальными
настройками маршрута.
toАтрибут to может быть:
<Link to="/contact">Контакты</Link>
<Link
to={{
pathname: "/profile",
search: "?tab=info",
hash: "#section2",
state: { fromDashboard: true }
}}
>
Профиль
</Link>
pathname — путь маршрута.search — строка запроса, аналогичная
?key=value.hash — якорь на странице.state — объект состояния, который можно использовать
при навигации, например для передачи данных между компонентами без
использования глобального состояния.Link добавляет запись в историю браузера, что позволяет
использовать стандартные кнопки «Назад» и «Вперед». При этом
перезагрузка страницы не выполняется, что отличает Link от
стандартного HTML-тега <a>.
<Link to="/dashboard">Панель управления</Link>
Использование <a href="/dashboard"> в этом случае
приведет к полной перезагрузке страницы и потере состояния
React-приложения.
Для выделения активного маршрута используется компонент
NavLink, который расширяет функциональность
Link. Но даже без него можно вручную определить активное
состояние:
<Link
to="/home"
className={location.pathname === "/home" ? "active" : ""}
>
Главная
</Link>
state и
передача данныхС помощью state можно передавать любые данные между
маршрутами:
<Link
to={{
pathname: "/checkout",
state: { cartItems: items }
}}
>
Оформить заказ
</Link>
На целевой странице доступ к этим данным осуществляется через хук
useLocation:
import { useLocation } from 'react-router-dom';
const Checkout = () => {
const location = useLocation();
const { cartItems } = location.state || {};
return <div>Элементы корзины: {cartItems.length}</div>;
}
Компонент Link поддерживает стандартное событие
onClick. Это позволяет выполнять дополнительные действия
при клике:
<Link
to="/profile"
onCl ick={(e) => {
if (!userLoggedIn) {
e.preventDefault();
alert("Необходимо войти в систему");
}
}}
>
Профиль
</Link>
Здесь e.preventDefault() предотвращает стандартную
навигацию, если выполняются определенные условия.
Для более сложных сценариев, где требуется программно изменить
маршрут, используется хук useNavigate. Link
можно комбинировать с этим подходом для динамической генерации
ссылок:
import { useNavigate } from 'react-router-dom';
const NavigationButton = () => {
const navigate = useNavigate();
const goToProfile = () => navigate("/profile", { state: { fromDashboard: true } });
return <button onCl ick={goToProfile}>Профиль</button>;
}
При использовании вложенной маршрутизации Link корректно
формирует относительные пути:
<Link to="settings">Настройки</Link>
Если текущий путь /profile, то переход будет
/profile/settings. Для абсолютного пути следует
использовать слэш в начале:
<Link to="/settings">Настройки</Link>
Link корректно работает с браузерной историей,
поддерживает открытие ссылок в новой вкладке через
target="_blank":
<Link to="/help" target="_blank" rel="noopener noreferrer">Справка</Link>
Атрибут rel="noopener noreferrer" добавляется для
безопасности при открытии внешних ссылок.
state.useNavigate.Link является основным строительным блоком для навигации
в React Router и обеспечивает гибкость при реализации маршрутов,
интеграции состояния и динамических переходов.