MUI Icons — это библиотека компонентов, предоставляющая доступ к большому набору векторных иконок, интегрированных с React и библиотекой Material-UI. Иконки упрощают создание интерфейсов, обеспечивая визуальную консистентность и поддержку стандартов Material Design.
Для начала необходимо установить пакет с иконками. MUI Icons
распространяется отдельно от основной библиотеки
@mui/material:
npm install @mui/icons-material
или через Yarn:
yarn add @mui/icons-material
Также требуется наличие пакета @mui/material и
@emotion/react для корректного рендеринга компонентов.
Иконки импортируются как React-компоненты. Например, иконка добавления:
import AddIcon from '@mui/icons-material/Add';
function MyButton() {
return <AddIcon />;
}
Каждая иконка представляет собой самостоятельный компонент, который можно использовать в любом месте JSX. По умолчанию иконки наследуют размер и цвет от родительского элемента, что облегчает их стилизацию.
Размер и цвет иконок регулируются
через свойства fontSize и color.
<AddIcon fontSize="small" /> // Маленькая иконка
<AddIcon fontSize="medium" /> // Средняя (по умолчанию)
<AddIcon fontSize="large" /> // Большая иконка
Свойство color позволяет использовать как
предопределённые цвета MUI, так и кастомные:
<AddIcon color="primary" />
<AddIcon color="secondary" />
<AddIcon sx={{ color: '#FF5722' }} /> // Пользовательский цвет через sx
sx является мощным инструментом для точной настройки
стилей: размер, отступы, трансформации.
Иконки часто используются вместе с компонентами Material-UI, такими
как Button, IconButton,
ListItemIcon.
Пример с кнопкой:
import Button from '@mui/material/Button';
import DeleteIcon from '@mui/icons-material/Delete';
<Button
variant="contained"
color="error"
startIcon={<DeleteIcon />}
>
Удалить
</Button>
startIcon и endIcon позволяют разместить
иконку слева или справа от текста кнопки. Это упрощает создание
интерфейсов с визуальными индикаторами действий.
Пример с IconButton:
import IconButton from '@mui/material/IconButton';
import MenuIcon from '@mui/icons-material/Menu';
<IconButton color="primary" aria-label="menu">
<MenuIcon />
</IconButton>
IconButton предназначен для интерактивных элементов без
текста, обеспечивая правильные отступы и ховер-эффекты.
Для минимизации размера сборки рекомендуется импортировать только используемые иконки, а не весь пакет:
// Плохо — импортирует весь пакет
import * as Icons from '@mui/icons-material';
// Хорошо — импорт только нужной иконки
import AddIcon from '@mui/icons-material/Add';
Использование tree-shaking в современных сборщиках (Webpack, Vite) предотвращает попадание неиспользуемых иконок в финальный бандл.
Иногда иконку нужно выбирать динамически по имени. Для этого можно создать объект или карту иконок:
import HomeIcon from '@mui/icons-material/Home';
import SettingsIcon from '@mui/icons-material/Settings';
const icons = {
home: HomeIcon,
settings: SettingsIcon,
};
function DynamicIcon({ name }) {
const IconComponent = icons[name];
return IconComponent ? <IconComponent /> : null;
}
Такой подход упрощает работу с динамическими интерфейсами и списками элементов.
Иконки MUI полностью совместимы с CSS и sx пропсом.
Можно применять повороты, масштабирование и плавные анимации:
<AddIcon sx={{ transform: 'rotate(45deg)', transition: 'transform 0.3s' }} />
Комбинация с @mui/material компонентами, такими как
Tooltip или Badge, позволяет создавать
интерактивные и информативные элементы интерфейса:
import Badge from '@mui/material/Badge';
import MailIcon from '@mui/icons-material/Mail';
<Badge badgeContent={4} color="secondary">
<MailIcon />
</Badge>
Если требуется использовать свою SVG-иконку, MUI предоставляет
компонент SvgIcon:
import SvgIcon from '@mui/material/SvgIcon';
function CustomIcon(props) {
return (
<SvgIcon {...props}>
<path d="M10 20v-6h4v6h5v-8h3L12 3 2 12h3v8z"/>
</SvgIcon>
);
}
Использование SvgIcon обеспечивает совместимость с
остальными компонентами MUI, включая color,
fontSize и sx.
fontSize и цвет через
color или sx.IconButton,
Badge для улучшения UX.SvgIcon для собственных SVG, сохраняя
консистентность стиля.Такой подход обеспечивает масштабируемость интерфейса, высокую производительность и визуальное соответствие стандартам Material Design.