Link компонент и навигация

Компонент Link из библиотеки MUI (Material-UI) предназначен для создания ссылок, поддерживающих как стандартное HTML-поведение <a>, так и интеграцию с современными библиотеками маршрутизации, такими как React Router или Next.js. Он обеспечивает согласованное оформление ссылок в рамках Material Design и позволяет управлять стилями, цветами и поведением навигации.

Базовое использование:

import Link from '@mui/material/Link';

<Link href="https://mui.com" target="_blank" rel="noopener">
  Перейти на сайт MUI
</Link>

Здесь href указывает адрес перехода, target="_blank" открывает ссылку в новой вкладке, а rel="noopener" предотвращает потенциальные уязвимости при открытии внешних ссылок.


  • href — адрес перехода (обязательный для внешних ссылок).
  • underline — управление подчеркиванием: 'none' | 'hover' | 'always'. Значение 'hover' по умолчанию.
  • color — цвет текста, поддерживаются стандартные значения MUI ('primary', 'secondary', 'inherit', 'textPrimary', 'textSecondary').
  • variant — типографический стиль текста, наследуемый от компонента Typography.
  • component — позволяет заменить рендеринг на другой элемент, например, <RouterLink> для интеграции с React Router.

Пример использования underline и color:

<Link href="/about" underline="none" color="secondary">
  О компании
</Link>

Интеграция с React Router

Для SPA (Single Page Application) важно использовать навигацию без полной перезагрузки страницы. Компонент Link MUI легко комбинируется с React Router через свойство component.

import { Link as RouterLink } from 'react-router-dom';
import Link from '@mui/material/Link';

<Link component={RouterLink} to="/dashboard">
  Панель управления
</Link>

Здесь происходит замена базового <a> на <RouterLink>, сохраняя стили и поведение MUI. Это позволяет использовать преимущества маршрутизации React Router, включая history и управление переходами без перезагрузки.


Навигация в Next.js

Для проектов на Next.js тоже возможна интеграция через компонент Link от MUI с использованием next/link:

import NextLink from 'next/link';
import Link from '@mui/material/Link';

<Link component={NextLink} href="/blog">
  Блог
</Link>

Важно помнить, что начиная с Next.js 13, next/link поддерживает обертку без дочернего элемента <a> и совместима с MUI Link.


Стилизация и пользовательский дизайн

MUI позволяет полностью управлять стилями компонента Link. Возможны как встроенные пропсы, так и sx-параметр или styled API для более гибкой кастомизации:

<Link
  href="#"
  underline="hover"
  sx={{
    fontWeight: 'bold',
    fontSize: 18,
    '&:hover': {
      color: 'primary.main',
    },
  }}
>
  Кастомная ссылка
</Link>

Использование sx позволяет комбинировать стандартные возможности темы MUI с кастомными стилями, поддерживая единый визуальный язык всего приложения.


Поведение при навигации и accessibility

  • Keyboard Navigation: компоненты Link корректно реагируют на нажатие клавиши Tab и Enter.
  • ARIA-атрибуты: при необходимости можно добавить aria-label для улучшенной доступности.
  • Target и rel: для внешних ссылок рекомендуется использовать target="_blank" и rel="noopener noreferrer".

Пример с accessibility:

<Link href="https://example.com" target="_blank" rel="noopener noreferrer" aria-label="Перейти на Example">
  Example
</Link>

Комбинирование с Typography

Часто ссылки отображаются внутри текста, где требуется согласованный типографический стиль. MUI позволяет объединять Link с Typography:

import Typography from '@mui/material/Typography';

<Typography variant="body1">
  Подробнее о <Link href="/features">функциях</Link> продукта.
</Typography>

Ссылка наследует стиль body1, сохраняя визуальную целостность текста.


Пример комплексной навигационной панели

import AppBar from '@mui/material/AppBar';
import Toolbar from '@mui/material/Toolbar';
import Link from '@mui/material/Link';
import { Link as RouterLink } from 'react-router-dom';

<AppBar position="static">
  <Toolbar>
    <Link component={RouterLink} to="/" color="inherit" underline="none" sx={{ mr: 3 }}>
      Главная
    </Link>
    <Link component={RouterLink} to="/about" color="inherit" underline="none" sx={{ mr: 3 }}>
      О нас
    </Link>
    <Link component={RouterLink} to="/contact" color="inherit" underline="none">
      Контакты
    </Link>
  </Toolbar>
</AppBar>

В этом примере создается горизонтальная навигационная панель, где все ссылки интегрированы с React Router, сохраняют стили MUI и обеспечивают плавную навигацию без перезагрузки страницы.


Компонент Link в MUI — это гибкий инструмент для навигации, который сочетает визуальное единообразие Material Design, совместимость с различными фреймворками маршрутизации и возможности полной кастомизации через систему темы и sx. Его правильное использование обеспечивает удобство пользователя, доступность и удобное управление стилями.