ToggleButton и ToggleButtonGroup — это компоненты библиотеки MUI, предназначенные для создания кнопок-переключателей и групп связанных кнопок, где можно управлять состоянием выбора. Они часто применяются для выбора между несколькими вариантами, фильтрации данных или настройки пользовательского интерфейса.
ToggleButton представляет собой кнопку, которая
может находиться в двух состояниях: активном (выбранном) и неактивном.
Состояние управляется через проп selected.
Пример базового использования:
import ToggleButton from '@mui/material/ToggleButton';
function Example() {
const [selected, setSelected] = React.useState(false);
const handleToggle = () => {
setSelected(!selected);
};
return (
<ToggleButton
value="check"
selected={selected}
onCha nge={handleToggle}
>
Опция
</ToggleButton>
);
}
Ключевые пропсы ToggleButton:
value — уникальное значение кнопки, используется в
группе.selected — булево значение, определяющее активность
кнопки.onChange — функция, вызываемая при изменении состояния
кнопки.disabled — отключает кнопку.size — управляет размером кнопки (small,
medium, large).color — цвет кнопки (standard,
primary, secondary, error,
info, success, warning).ToggleButtonGroup предназначен для объединения
нескольких кнопок ToggleButton в логическую группу. Группа может
поддерживать как одиночный выбор (exclusive), так и
множественный выбор.
Пример использования с одиночным выбором:
import ToggleButton from '@mui/material/ToggleButton';
import ToggleButtonGroup from '@mui/material/ToggleButtonGroup';
function Example() {
const [alignment, setAlignment] = React.useState('left');
const handleAlignment = (event, newAlignment) => {
if (newAlignment !== null) {
setAlignment(newAlignment);
}
};
return (
<ToggleButtonGroup
value={alignment}
exclusive
onCha nge={handleAlignment}
aria-label="Выравнивание"
>
<ToggleButton value="left" aria-label="Слева">
Слева
</ToggleButton>
<ToggleButton value="center" aria-label="По центру">
По центру
</ToggleButton>
<ToggleButton value="right" aria-label="Справа">
Справа
</ToggleButton>
</ToggleButtonGroup>
);
}
Пропсы ToggleButtonGroup:
value — текущее выбранное значение (или массив значений
для множественного выбора).exclusive — булево значение. Если true,
разрешает выбрать только одну кнопку.onChange — функция обратного вызова, вызываемая при
изменении выбора.orientation — ориентация группы
(horizontal или vertical).size — размер всех кнопок в группе.color — цвет всех кнопок в группе.disabled — отключает все кнопки группы.Для реализации множественного выбора exclusive
устанавливать не нужно. Значение группы должно быть массивом выбранных
значений:
const [formats, setFormats] = React.useState([]);
const handleFormat = (event, newFormats) => {
setFormats(newFormats);
};
<ToggleButtonGroup
value={formats}
onCha nge={handleFormat}
>
<ToggleButton value="bold">Жирный</ToggleButton>
<ToggleButton value="italic">Курсив</ToggleButton>
<ToggleButton value="underlined">Подчёркнутый</ToggleButton>
</ToggleButtonGroup>
Если кнопка уже выбрана, её повторный клик снимает выделение, что позволяет динамически управлять состоянием массива.
Стилизация через sx и
styled:
sx позволяет быстро применять стили:<ToggleButton sx={{ borderRadius: 2, borderColor: 'primary.main' }}>
Кастом
</ToggleButton>
styled позволяет создавать полностью кастомные кнопки с
переопределением состояния:import { styled } from '@mui/material/styles';
import ToggleButton from '@mui/material/ToggleButton';
const CustomToggleButton = styled(ToggleButton)(({ theme }) => ({
borderRadius: '12px',
'&.Mui-selected': {
backgroundColor: theme.palette.success.main,
color: '#fff',
},
'&:hover': {
backgroundColor: theme.palette.success.light,
},
}));
aria-label и aria-pressed
помогает создать доступный интерфейс.ToggleButtonGroup
с aria-label для семантической идентификации группы
кнопок.value и
onChange.Toolbar, Paper или Card для
создания интерактивных панелей.value и отдельный onChange,
чтобы избежать конфликта состояний.sx
и styled можно создавать плавное изменение цвета и масштаба
при переключении.ToggleButton и ToggleButtonGroup предоставляют гибкий и мощный инструмент для управления состояниями выбора в интерфейсе. Сочетание простоты использования с высокой кастомизацией делает их незаменимыми для построения интерактивных панелей управления и фильтров в приложениях на React.