Библиотека MUI предоставляет пакет готовых иконок
@mui/icons-material, который включает в себя сотни
SVG-иконок, соответствующих Material Design. Для подключения конкретной
иконки используется синтаксис:
import IconName from '@mui/icons-material/IconName';
Где IconName — название иконки с использованием
CamelCase. Например, для иконки поиска это будет:
import SearchIcon from '@mui/icons-material/Search';
Использование иконки в компоненте React осуществляется через JSX:
<SearchIcon fontSize="large" color="primary" />
Параметры fontSize и color позволяют
управлять размером и цветом иконки без применения дополнительных
CSS-правил.
Одной из ключевых особенностей MUI является поддержка tree
shaking. Это означает, что при корректном импорте конкретной
иконки в итоговый бандл попадёт только эта иконка, а не весь пакет
@mui/icons-material. Важно избегать массового импорта всего
набора иконок:
// Неэффективно:
import * as Icons from '@mui/icons-material';
// Правильно:
import HomeIcon from '@mui/icons-material/Home';
Массивный импорт приводит к увеличению размера бандла и снижению производительности приложения.
SvgIconВсе иконки MUI построены на компоненте SvgIcon, что даёт
возможность создавать собственные SVG-иконки и интегрировать их в
библиотеку компонентов MUI без потери функционала. Пример создания
кастомной иконки:
import { SvgIcon } from '@mui/material';
function CustomIcon(props) {
return (
<SvgIcon {...props}>
<path d="M10 20v-6h4v6h5v-8h3L12 3 2 12h3v8z" />
</SvgIcon>
);
}
Такой подход позволяет:
Для проектов с большим количеством иконок полезен динамический импорт, который позволяет загружать иконки только при необходимости:
import React, { Suspense, lazy } from 'react';
const LazySearchIcon = lazy(() => import('@mui/icons-material/Search'));
function App() {
return (
<Suspense fallback={<div>Загрузка...</div>}>
<LazySearchIcon />
</Suspense>
);
}
Это особенно актуально для страниц с редкими иконками, где импорт всех иконок на старте увеличивает время загрузки.
MUI предоставляет встроенные свойства для быстрого изменения внешнего вида иконок:
fontSize:
"small" | "medium" | "large" | "inherit".color:
"primary" | "secondary" | "action" | "disabled" | "error" | "inherit".Дополнительно можно применять CSS через sx:
<SearchIcon sx={{ fontSize: 40, color: 'green' }} />
sx позволяет комбинировать MUI-тему с кастомными
стилями, не создавая отдельный CSS-файл.
Иконки часто используются внутри Button,
IconButton и ListItemIcon. Пример
использования с IconButton:
import IconButton from '@mui/material/IconButton';
import DeleteIcon from '@mui/icons-material/Delete';
<IconButton aria-label="delete">
<DeleteIcon />
</IconButton>
Такой подход сохраняет доступность интерфейса за счёт корректных
aria-label и интегрирует иконку с Material-стилями
кнопки.
SvgIcon для всех кастомных иконок, чтобы
сохранить стилистику MUI.fontSize,
color или sx, избегая избыточного CSS.Button,
IconButton, ListItemIcon) для поддержания
согласованного интерфейса и доступности.Эти методы обеспечивают минимальный размер бандла, высокую производительность и гибкость в проектировании интерфейса с использованием иконок MUI.