Accordion
import {Accordion} from '@gravity-ui/uikit';
Компонент Accordion позволяет создавать сворачиваемые панели контента, где пользователи могут показывать или скрывать разделы информации. Это полезно для организации больших объемов контента в компактном виде.
§Управление состоянием аккордеона
Вы можете управлять состоянием аккордеона, используя свойства value
и onUpdate
корневого компонента или для каждого элемента отдельно.
Пример управления состоянием из корневого компонента:
function ControlledAccordion() {
const [value, setValue] = React.useState('item1');
return (
<Accordion value={value} onUpdate={setValue}>
<Accordion.Item summary="Настройки" value="item1">
Настройте параметры вашего приложения
</Accordion.Item>
<Accordion.Item summary="Уведомления" value="item2">
Управляйте настройками уведомлений
</Accordion.Item>
</Accordion>
);
}
Пример управления состоянием для каждого элемента через свойство expanded:
function ControlledAccordion() {
const [item1, setItem1] = React.useState(true);
const [item2, setItem2] = React.useState(false);
return (
<Accordion>
<Accordion.Item
summary="Настройки"
onUpdate={setItem1}
value="item1"
expanded={item1}
>
Настройте параметры вашего приложения
</Accordion.Item>
<Accordion.Item
summary="Уведомления"
onUpdate={setItem2}
value="item2"
expanded={item2}
>
Управляйте настройками уведомлений
</Accordion.Item>
</Accordion>
);
}
§Размер
Используйте свойство size
для управления размером Accordion
. Размер по умолчанию — m
.
§Внешний вид
solid
: Основной вид с фоном (используется по умолчанию).
top-bottom
: Вид с верхней и нижней границами.
<Accordion view="solid">
<Accordion.Item summary="Сплошной вид">
Содержимое со сплошным фоном
</Accordion.Item>
<Accordion.Item summary="Другой элемент">
Больше содержимого
</Accordion.Item>
</Accordion>
<Accordion view="top-bottom">
<Accordion.Item summary="Вид с границами">
Содержимое с верхней и нижней границами
</Accordion.Item>
<Accordion.Item summary="Другой элемент">
Больше содержимого
</Accordion.Item>
</Accordion>
§Позиция стрелки
end
: Стрелка расположена в конце заголовка (используется по умолчанию).
start
: Стрелка расположена в начале заголовка.
<Accordion arrowPosition="end">
<Accordion.Item summary="Стрелка в конце">
Содержимое со стрелкой в конце
</Accordion.Item>
</Accordion>
<Accordion arrowPosition="start">
<Accordion.Item summary="Стрелка в начале">
Содержимое со стрелкой в начале
</Accordion.Item>
</Accordion>
§Множественное раскрытие
Свойство multiple
позволяет одновременно раскрывать несколько элементов аккордеона.
<Accordion multiple>
<Accordion.Item summary="Первый элемент">
Содержимое первого элемента
</Accordion.Item>
<Accordion.Item summary="Второй элемент">
Содержимое второго элемента
</Accordion.Item>
<Accordion.Item summary="Третий элемент">
Содержимое третьего элемента
</Accordion.Item>
</Accordion>
§Пользовательский заголовок
Используйте компонент Accordion.Summary
для создания пользовательского заголовка.
<Accordion>
<Accordion.Item value="custom">
<Accordion.Summary>
{(props) => (
<Button {...props} view="flat" width="max">
<Icon data={Settings} size={16} />
Пользовательская кнопка заголовка
</Button>
)}
</Accordion.Summary>
Содержимое с пользовательским компонентом заголовка
</Accordion.Item>
<Accordion.Item summary="Обычный заголовок">
Содержимое с обычным свойством заголовка
</Accordion.Item>
</Accordion>
§Отключенное состояние
Отдельные элементы аккордеона могут быть отключены с помощью свойства disabled
.
<Accordion>
<Accordion.Item summary="Активный элемент">
Этот элемент активен и может быть раскрыт
</Accordion.Item>
<Accordion.Item summary="Отключенный элемент" disabled>
Этот элемент отключен и не может быть раскрыт
</Accordion.Item>
</Accordion>
§Свойства
§Accordion
Название | Описание | Тип | По умолчанию |
---|---|---|---|
size | Размер аккордеона | "m" "l" "xl" | "m" |
view | Внешний вид аккордеона | "solid" "top-bottom" | "solid" |
multiple | Разрешить одновременное раскрытие нескольких элементов | boolean | false |
arrowPosition | Позиция индикатора стрелки | "start" "end" | "end" |
defaultValue | Значение по умолчанию для неконтролируемого состояния | string string[] undefined | |
value | Текущее значение для контролируемого состояния | string string[] undefined | |
onUpdate | Функция обратного вызова, вызываемая при изменении состояния | Function | |
ariaLevel | Уровень заголовка для доступности | number | 3 |
className | CSS класс | string | |
qa | HTML атрибут data-qa , используется для тестирования | string |
§Accordion.Item
Название | Описание | Тип | По умолчанию |
---|---|---|---|
value | Уникальный идентификатор элемента | string | |
summary | Заголовок элемента аккордеона | React.ReactNode | |
expanded | Контролируемое состояние раскрытия | boolean | |
defaultExpanded | Состояние раскрытия по умолчанию | boolean | |
disabled | Отключает элемент аккордеона | boolean | false |
keepMounted | Сохранять содержимое в DOM даже при сворачивании | boolean | |
onUpdate | Функция обратного вызова, вызываемая при изменении состояния элемента | Function | |
className | CSS класс | string | |
qa | HTML атрибут data-qa , используется для тестирования | string |
§Accordion.Summary
Название | Описание | Тип | По умолчанию |
---|---|---|---|
children | Пользовательская функция рендеринга заголовка | (props, defaultSummary) => React.ReactElement | |
qa | HTML атрибут data-qa , используется для тестирования. Работает только если qa передан в Accordion.Item | string | ${accordion-item}-summary если qa передан в Accordion.Item, disclosure-summary если нет |