Компонент NavLink является специализированным инструментом для навигации в приложениях на React, построенных с использованием React Router. Он расширяет возможности стандартного компонента Link, позволяя автоматически присваивать активный стиль элементу навигации в зависимости от текущего маршрута. Это делает NavLink незаменимым при создании динамических меню и подсветки активных ссылок.
NavLink поддерживает несколько ключевых свойств, которые позволяют гибко управлять отображением активных ссылок:
"/about") или объектом
{ pathname, search, hash, state }.true, ссылка будет считаться
активной только при полном совпадении пути.{ isActive, isPending } и возвращает строку с
классами.className, но для
inline-стилей. Может быть объектом или функцией
( { isActive, isPending } ) => styleObject.{ isActive, isPending } и возвращающей JSX, что позволяет
создавать полностью кастомизированные элементы навигации.Пример базового использования:
import { NavLink } from 'react-router-dom';
isActive ? 'active-link' : undefined}>
О нас
В этом примере ссылка будет автоматически получать класс
active-link, когда текущий маршрут совпадает с
/about.
NavLink предоставляет мощный механизм управления активным состоянием. Основные моменты:
end) По умолчанию
NavLink считает ссылку активной, если текущий маршрут начинается с пути
в to. Для ограничения до точного совпадения используется
свойство end.
Главная
Без end путь / будет активен также для
/about, /contact и других маршрутов,
начинающихся с /.
isActive ? 'profile-active' : 'profile-inactive'}
style={({ isPending }) => ({ opacity: isPending ? 0.5 : 1 })}
>
Профиль
Здесь одновременно контролируется класс и стиль в зависимости от состояния навигации.
NavLink идеально подходит для работы с вложенными маршрутами. Вложенные маршруты позволяют создавать интерфейсы с несколькими уровнями навигации, при этом NavLink корректно подсвечивает активные пункты:
Панель
Настройки
end первый NavLink активен только на
/dashboard./dashboard/settings и
подсвечивается отдельно, что облегчает визуальное восприятие структуры
приложения.NavLink может использовать динамические параметры маршрута, что особенно полезно для построения меню на основе данных:
const users = [
{ id: 1, name: 'Алексей' },
{ id: 2, name: 'Мария' }
];
users.map(user => (
isActive ? 'user-active' : ''}
>
{user.name}
))
С помощью этого подхода каждая ссылка автоматически получает активное состояние при переходе на конкретного пользователя.
NavLink поддерживает объектную форму to, что позволяет
передавать дополнительные данные через state, а также
использовать параметры поиска и хэши:
Книги
Такой подход обеспечивает передачу данных между страницами без использования глобального состояния, что особенно удобно для фильтров и динамических меню.
className.style с функцией, чтобы управлять прозрачностью, цветами
или transform на основе isActive.isPending позволяет реагировать на асинхронные
переходы, например, при ленивой загрузке компонентов через
React.lazy.useLocation и
useNavigate, что облегчает управление состоянием маршрутов
и переходами программно.
ul и li обеспечивает
семантическую правильность.end на главной странице предотвращает ложную
активацию всех ссылок, начинающихся с /.active или кастомные обеспечивают визуальную
подсветку текущего раздела.