SegmentedControl
Компонент, который позволяет пользователю выбрать одно значение из набора опций. Визуально представляет собой группу сегментированных кнопок, где активная опция выделяется с помощью ползунка.
Применение компонента
Компонент может использоваться как навигационный элемент (аналог Tabs) или
как элемент формы (аналог RadioGroup).
Избегайте слишком большого числа сегментов: рекомендуется от трёх до семи кнопок для планшетов и десктопов и до пяти — в мобильном представлении.
В качестве контента используйте либо только иконки, либо только текст, это позволит вашему дизайну оставаться консистентным и простым.
Режим работы
Компонент поддерживает работу как в неконтролируемом режиме, так и контролируемом. Это стандартное поведение React-компонентов, прочитать про это можно в документации React ↗.
Для использования неконтролируемого режима достаточно просто не передавать value или передавать defaultValue, если
требуется задать значение по умолчанию.
Для контролируемого режима используйте связку свойств value/onChange для задания значения и его изменения.
const colors = [
{
value: 'red',
label: 'Красный',
},
{
value: 'green',
label: 'Зелёный',
},
{
value: 'blue',
label: 'Синий',
},
];
// Неконтролируемое состояние
<SegmentedControl options={colors} defaultValue="red" />;
// Контролируемое состояние
const [color, setColor] = React.useState('red');
<SegmentedControl options={colors} value={color} onChange={setColor} />;Доступность (a11y)
По умолчанию компонент использует role="radiogroup", обеспечивая поддержку соответствующего данной роли поведения.
Использование как навигационного элемента
Компонент SegmentedControl может использоваться для создания навигации (аналог Tabs). В этом случае необходимо:
- Установить свойство
role="tablist"; - Для каждой опции указать:
id- уникальный идентификатор;aria-controls- идентификатор области с контентом, который становится доступен при выборе данной опции.
- Для области с контентом указать:
role="tabpanel"- роль панели с контентом;aria-labelledby- идентификатор опции, который управляет этой областью;tabIndex={0}- чтобы сделать область фокусируемой;id- идентификатор панели, который соответствуетaria-controlsв конкретной области.
Это обеспечит правильную семантику и доступность компонента для пользователей ассистивных технологий.
Свойства и методы
| Свойство | Описание |
|---|---|
defaultValue | SegmentedControlValueЗначение по умолчанию (для неконтролируемого компонента). По умолчанию: options[0]?.value |
getRootRef | Ref<HTMLDivElement>По умолчанию: - |
name | stringИмя для input-элементов внутри компонента. По умолчанию: - |
onChange | ((value: T) => void)Обработчик изменения выбранного значения. По умолчанию: - |
options | SegmentedControlOptionInterface<T>[]Массив опций для отображения в компоненте. По умолчанию: - |
size | "m" | "l"Размер компонента. По умолчанию: l |
value | SegmentedControlValueТекущее выбранное значение (для контролируемого компонента). По умолчанию: - |