ListItemButton в библиотеке MUI является
специализированным компонентом, предназначенным для создания
кликабельных элементов внутри списка. Он расширяет функциональность
стандартного ListItem, позволяя легко обрабатывать
взаимодействия пользователя, интегрировать маршрутизацию и изменять
стили при наведении или активации.
ListItemButton применяется внутри List и
обычно комбинируется с компонентами ListItemIcon и
ListItemText для создания полноценного интерактивного
элемента списка.
Пример базового использования:
import List from '@mui/material/List';
import ListItemButton from '@mui/material/ListItemButton';
import ListItemText from '@mui/material/ListItemText';
<List>
<ListItemButton onCl ick={() => console.log('Clicked!')}>
<ListItemText primary="Элемент списка" />
</ListItemButton>
</List>
Ключевые моменты:
onClick — основное событие для обработки клика.ListItemText позволяет отображать текстовую
информацию.ListItemButton автоматически применяет эффекты
наведения и активного состояния, соответствующие дизайну Material.Для создания элементов с иконками используется
ListItemIcon. Это позволяет визуально структурировать
список и выделить каждый элемент.
import ListItemIcon from '@mui/material/ListItemIcon';
import InboxIcon from '@mui/icons-material/Inbox';
<ListItemButton>
<ListItemIcon>
<InboxIcon />
</ListItemIcon>
<ListItemText primary="Входящие" />
</ListItemButton>
Особенности:
Avatar для более сложных
элементов списка.ListItemButton поддерживает следующие состояния:
Пример использования состояния selected:
<ListItemButton selected={selectedIndex === 0} onCl ick={() => setSelectedIndex(0)}>
<ListItemText primary="Пункт 1" />
</ListItemButton>
selected принимает булево значение.useState можно управлять активным
элементом списка динамически.ListItemButton отлично интегрируется с маршрутизаторами,
например, react-router-dom. Для этого используется проп
component="a" или component={Link}.
import { Link } from 'react-router-dom';
<ListItemButton component={Link} to="/dashboard">
<ListItemText primary="Панель управления" />
</ListItemButton>
component позволяет использовать кастомный
компонент вместо стандартного <button>.to работает с роутерами, определяя путь
навигации.MUI поддерживает кастомизацию через sx и
styled. Можно изменить цвет, отступы, анимацию при
наведении.
<ListItemButton
sx={{
borderRadius: 2,
'&:hover': {
backgroundColor: 'primary.light',
},
'&.Mui-selected': {
backgroundColor: 'primary.main',
color: 'white',
},
}}
>
<ListItemText primary="Стилизация" />
</ListItemButton>
Особенности:
&:hover изменяет стиль при наведении.&.Mui-selected позволяет кастомизировать активный
элемент.sx поддерживает большинство CSS-свойств, включая flex,
margin, padding и типографику.ListItemButton легко комбинируется с чекбоксами,
аватарами и другими интерактивными элементами для создания сложных
интерфейсов:
import Checkbox from '@mui/material/Checkbox';
import Avatar from '@mui/material/Avatar';
<ListItemButton>
<Checkbox edge="start" />
<Avatar src="/profile.jpg" />
<ListItemText primary="Пользователь" />
</ListItemButton>
Checkbox позволяет выбирать несколько элементов
списка.Avatar визуально выделяет пользователя или объект.React.memo или useCallback
для оптимизации списков с большим количеством
ListItemButton.List с
виртуализацией (react-virtualized или
react-window) для ускорения рендеринга.ListItemButton является основным инструментом для
создания интерактивных списков в MUI. Он сочетает удобство кликабельного
элемента с полной кастомизацией стиля и возможностью интеграции с
роутингом, иконками и сложными интерфейсами.