Компонент Accordion библиотеки MUI используется для создания скрываемых и раскрываемых панелей контента. Он позволяет пользователю управлять видимостью различных блоков информации, делая интерфейс более компактным и удобным для восприятия.
Базовая структура Accordion состоит из трех ключевых элементов:
Пример базового использования:
import * as React from 'react';
import Accordion from '@mui/material/Accordion';
import AccordionSummary from '@mui/material/AccordionSummary';
import AccordionDetails from '@mui/material/AccordionDetails';
import Typography from '@mui/material/Typography';
import ExpandMoreIcon from '@mui/icons-material/ExpandMore';
function SimpleAccordion() {
return (
}
aria-controls="panel1a-content"
id="panel1a-header"
>
Заголовок панели 1
Содержимое панели 1.
);
}
Ключевые моменты:
expandIcon задаёт иконку раскрытия панели. В MUI чаще
всего используется .aria-controls и id обеспечивают корректную
доступность (accessibility) и связь заголовка с его содержимым.AccordionDetails, где
можно использовать любые компоненты MUI или обычный HTML.По умолчанию каждая панель Accordion управляет своим состоянием автоматически: открытие одной панели не влияет на другие. Для более сложных сценариев, например, когда требуется раскрывать только одну панель из группы, необходимо управлять состоянием вручную с помощью React.
Пример с контролируемым Accordion:
function ControlledAccordion() {
const [expanded, setExpanded] = React.useState(false);
const handleChange = (panel) => (event, isExpanded) => {
setExpanded(isExpanded ? panel : false);
};
return (
}>
Панель 1
Контент панели 1
}>
Панель 2
Контент панели 2
);
}
Принцип работы:
expanded хранит идентификатор текущей
открытой панели.handleChange обновляет состояние при клике,
обеспечивая поведение «только одна открытая панель».Компонент Accordion поддерживает глубокую кастомизацию через пропсы и стили MUI. Основные возможности:
react-transition-group.Пример кастомизированного Accordion:
}>
Кастомная панель
Панель с изменёнными стилями: фон, граница, радиус.
Возможна организация Accordion внутри другой панели для создания многоуровневого интерфейса. Важно следить за управлением состояния, чтобы вложенные панели не конфликтовали с внешними.
Пример вложенного Accordion:
}>
Внешняя панель
}>
Внутренняя панель
Контент внутренней панели
MUI по умолчанию соблюдает требования ARIA, но важно корректно использовать:
aria-controls на AccordionSummary для
связи с AccordionDetails.id для уникальной идентификации каждой панели.disabled для панелей, которые не должны быть
интерактивными.Это обеспечивает правильное взаимодействие с экранными читалками и улучшает UX.