В библиотеке MUI (Material-UI) компонент
Select позволяет реализовывать удобный и наглядный
интерфейс для выбора одного или нескольких значений. Для поддержки
множественного выбора используется свойство multiple,
которое превращает обычный выпадающий список в контрол с возможностью
выбора нескольких опций.
Для начала необходимо импортировать ключевые компоненты из библиотеки MUI:
import * as React from 'react';
import { Select, MenuItem, InputLabel, FormControl, Checkbox, ListItemText } from '@mui/material';
Базовый пример множественного выбора выглядит следующим образом:
const [selectedValues, setSelectedValues] = React.useState([]);
const handleChange = (event) => {
setSelectedValues(event.target.value);
};
Выберите опции
selected.join(', ')}
>
{['Option 1', 'Option 2', 'Option 3'].map((name) => (
))}
multiple передается массив.Для более наглядного интерфейса применяют компонент
Checkbox внутри MenuItem. Важно
синхронизировать состояние checked с массивом выбранных
значений:
-1} />
С помощью ListItemText можно отображать текст опции
рядом с чекбоксом, сохраняя стандартный вид Material Design.
Функция renderValue отвечает за форматирование выбранных
значений:
renderValue={(selected) => selected.join(', ')}
Можно использовать более сложные варианты, например отображение в виде чипов с возможностью удаления каждого элемента:
import { Chip, Box } fr om '@mui/material';
renderValue={(selected) => (
{selected.map((value) => (
))}
)}
Такой подход делает интерфейс визуально аккуратным и информативным при множественном выборе.
Можно задать максимальное количество выбранных
элементов через дополнительную логику в обработчике
onChange:
const handleChange = (event) => {
const value = event.target.value;
if (value.length <= 3) {
setSelectedValues(value);
}
};
Для предустановленных значений достаточно задать
массив в useState:
const [selectedValues, setSelectedValues] = React.useState(['Option 1', 'Option 3']);
MUI автоматически обеспечивает поддержку навигации с клавиатуры в
компоненте Select. Для множественного выбора важно, чтобы
элементы MenuItem имели корректные свойства
aria-checked и role="option". Библиотека уже
интегрирует эти атрибуты при использовании multiple и
Checkbox, что обеспечивает доступность для пользователей с
особыми потребностями.
Если необходимо разрешить состояние, когда ничего не
выбрано, достаточно инициализировать value пустым
массивом:
const [selectedValues, setSelectedValues] = React.useState([]);
При этом функция renderValue может отображать
подсказку:
renderValue={(selected) =>
selected.length === 0 ? 'Ничего не выбрано' : selected.join(', ')
}
Список опций можно формировать динамически из массива объектов, что удобно при загрузке данных с сервера:
const options = [
{ id: 1, label: 'Option 1' },
{ id: 2, label: 'Option 2' },
{ id: 3, label: 'Option 3' }
];
{options.map((option) => (
))}
Такой подход позволяет легко интегрировать Select с множественным выбором в реальные проекты.
Компонент множественного выбора в MUI можно объединить в функциональный компонент с полной кастомизацией:
function MultiSelectComponent({ options }) {
const [selectedValues, setSelectedValues] = React.useState([]);
const handleChange = (event) => {
setSelectedValues(event.target.value);
};
return (
Выберите элементы
);
}
Такой компонент полностью готов к использованию и поддерживает динамические данные, кастомное отображение выбранных элементов, ограничения и предустановленные значения.