В библиотеке MUI (@mui/material) компоненты
ListItemIcon и ListItemText играют
ключевую роль при создании списков с визуальной структурой, где каждый
элемент содержит иконку и текстовое описание. Эти компоненты
используются внутри ListItem, обеспечивая удобное
выравнивание, адаптивность и единый стиль интерфейса.
ListItemIcon предназначен для отображения иконок в элементах списка. Основные моменты:
fontSize="medium" и соответствующие отступы
справа, чтобы текст не прилипал к иконке.@mui/icons-material.Пример использования:
import List from '@mui/material/List';
import ListItem from '@mui/material/ListItem';
import ListItemIcon from '@mui/material/ListItemIcon';
import ListItemText from '@mui/material/ListItemText';
import InboxIcon from '@mui/icons-material/Inbox';
import MailIcon from '@mui/icons-material/Mail';
function SimpleList() {
return (
<List>
<ListItem>
<ListItemIcon>
<InboxIcon />
</ListItemIcon>
<ListItemText primary="Входящие" />
</ListItem>
<ListItem>
<ListItemIcon>
<MailIcon />
</ListItemIcon>
<ListItemText primary="Отправленные" />
</ListItem>
</List>
);
}
Ключевые свойства ListItemIcon:
sx: объект стилей для кастомизации размеров, цвета,
отступов.children: обычно компонент иконки
(<InboxIcon />, <MailIcon /> и
др.).color="inherit".ListItemText отвечает за текстовое содержимое элемента списка. Основные возможности:
true, MUI не оборачивает текст в компонент Typography, что
позволяет использовать собственные стили.Пример использования с secondary текстом:
<ListItem>
<ListItemIcon>
<InboxIcon />
</ListItemIcon>
<ListItemText
primary="Входящие"
secondary="Не прочитанные сообщения"
/>
</ListItem>
Элементы primary и secondary могут быть строками, JSX или компонентами Typography, что даёт полную свободу кастомизации.
Использование sx и кастомных классов позволяет гибко
управлять внешним видом компонентов:
<ListItemText
primary="Входящие"
secondary="Не прочитанные"
sx={{
color: 'primary.main',
fontWeight: 'bold',
'& .MuiListItemText-secondary': {
color: 'text.secondary',
fontStyle: 'italic',
}
}}
/>
primaryTypographyProps и
secondaryTypographyProps: отдельные свойства для
настройки шрифтов и стилей основного и дополнительного текста без
глобального sx.Эти компоненты лучше всего использовать вместе внутри ListItem, чтобы создать структурированный элемент списка с иконкой и текстом. Общие рекомендации:
sx или inset, чтобы текст
визуально не «слипался» с иконкой.<List>
<ListItem button>
<ListItemIcon>
<InboxIcon />
</ListItemIcon>
<ListItemText
primary="Входящие"
secondary="5 новых сообщений"
primaryTypographyProps={{ fontWeight: 'medium' }}
/>
</ListItem>
<ListItem button>
<ListItemIcon>
<MailIcon />
</ListItemIcon>
<ListItemText
primary="Отправленные"
secondary="2 письма сегодня"
secondaryTypographyProps={{ fontStyle: 'italic' }}
/>
</ListItem>
</List>
В этом примере показаны кнопочные элементы списка с иконками и текстом, где primary и secondary текст стилизованы отдельно через Typography Props, обеспечивая гибкость и визуальную ясность.
sx и Typography Props
→ точная настройка шрифтов, цвета и отступов.Использование этих компонентов позволяет создавать удобочитаемые, структурированные списки, которые полностью соответствуют дизайну Material Design и сохраняют консистентность интерфейса.