Radix UI предоставляет высокоуровневые, доступные и настраиваемые
компоненты интерфейса для React, среди которых особое внимание
заслуживают контролируемые элементы выбора: RadioGroup,
CheckboxGroup, Accordion и другие
компоненты, поддерживающие режимы single и
multiple. Эти режимы определяют логику взаимодействия
пользователя с набором элементов.
singleРежим single подразумевает, что из группы элементов
можно выбрать только один элемент. Этот режим широко
используется в ситуациях, когда необходимо строгое ограничение выбора,
например, радио-кнопки или аккордеон с одиночным раскрытием.
import * as RadioGroup from '@radix-ui/react-radio-group';
function PaymentMethod() {
return (
<RadioGroup.Root defaultValue="credit" aria-label="Payment method">
<RadioGroup.Item value="credit">Кредитная карта</RadioGroup.Item>
<RadioGroup.Item value="paypal">PayPal</RadioGroup.Item>
<RadioGroup.Item value="bank">Банковский перевод</RadioGroup.Item>
</RadioGroup.Root>
);
}
Особенности:
value указывает на выбранный элемент.RadioGroup.Item может быть активным
одновременно.defaultValue.import * as Accordion from '@radix-ui/react-accordion';
<Accordion.Root type="single" defaultValue="item-1">
<Accordion.Item value="item-1">
<Accordion.Header>Секция 1</Accordion.Header>
<Accordion.Content>Контент секции 1</Accordion.Content>
</Accordion.Item>
<Accordion.Item value="item-2">
<Accordion.Header>Секция 2</Accordion.Header>
<Accordion.Content>Контент секции 2</Accordion.Content>
</Accordion.Item>
</Accordion.Root>
type="single" гарантирует, что одновременно
открыта будет только одна секция.collapsible={true}.multipleРежим multiple позволяет выбирать несколько
элементов одновременно. Такой подход применяется в
CheckboxGroup, многократном выборе аккордеона и других
списках с возможностью множественного выбора.
import * as Checkbox from '@radix-ui/react-checkbox';
function ToppingsSelector() {
return (
<div role="group" aria-label="Toppings">
<Checkbox.Root value="cheese">Сыр</Checkbox.Root>
<Checkbox.Root value="tomato">Помидор</Checkbox.Root>
<Checkbox.Root value="bacon">Бекон</Checkbox.Root>
</div>
);
}
checked и
onCheckedChange.import * as Accordion from '@radix-ui/react-accordion';
<Accordion.Root type="multiple" defaultValue={['item-1']}>
<Accordion.Item value="item-1">
<Accordion.Header>Секция 1</Accordion.Header>
<Accordion.Content>Контент секции 1</Accordion.Content>
</Accordion.Item>
<Accordion.Item value="item-2">
<Accordion.Header>Секция 2</Accordion.Header>
<Accordion.Content>Контент секции 2</Accordion.Content>
</Accordion.Item>
</Accordion.Root>
value.Radix UI позволяет управлять выбором как внутри компонента, так и извне.
Используется defaultValue или
defaultChecked:
<RadioGroup.Root defaultValue="paypal">
...
</RadioGroup.Root>
Состояние выбирается через React-хук useState:
const [selected, setSelected] = useState('credit');
<RadioGroup.Root value={selected} onValueCha nge={setSelected}>
...
</RadioGroup.Root>
single и multiplesingle облегчает
пользователю выбор и предотвращает ошибочные комбинации.multiple подходит для
настройки параметров, фильтров и опций с множественным выбором.single, другой с multiple).type="single" с collapsible={false} в
Accordion.type="multiple" и массив значений.value/checked.value, чтобы избежать конфликтов при управлении
состоянием.single оптимален для строго ограниченных выборов и
упрощает пользовательский интерфейс.multiple подходит для сложных форм и фильтров с
возможностью выбора нескольких опций.