Autocomplete — компонент библиотеки MUI (Material-UI) для реализации полей поиска с автодополнением. Он позволяет создавать динамические списки предложений на основе пользовательского ввода и обеспечивает удобный интерфейс для выбора значений. Компонент поддерживает работу с массивами простых данных, объектами, а также интеграцию с асинхронными источниками данных.
options Массив значений, которые будут
отображаться в списке автодополнения. Может быть массивом строк или
объектов. При использовании объектов необходимо определить свойства
getOptionLabel и renderOption.
const options = ['Apple', 'Banana', 'Cherry'];
<Autocomplete
options={options}
renderInput={(params) => <TextField {...params} label="Выберите фрукт" />}
/>renderInput Функция, возвращающая компонент
TextField или другой инпут для ввода текста. Через параметр
params передаются все необходимые свойства для корректной
работы Autocomplete.
getOptionLabel Функция, определяющая, как отображать значение в списке и инпуте, особенно актуальна для объектов:
const options = [{ name: 'Apple', id: 1 }, { name: 'Banana', id: 2 }];
<Autocomplete
options={options}
getOptionLabel={(option) => option.name}
renderInput={(params) => <TextField {...params} label="Фрукты" />}
/>value и onChange Позволяют управлять выбранным
значением и отслеживать изменения. onChange вызывается при
выборе элемента или очистке инпута.
const [value, setValue] = React.useState(null);
<Autocomplete
options={options}
value={value}
onCha nge={(event, newValue) => setValue(newValue)}
renderInput={(params) => <TextField {...params} label="Фрукты" />}
/>multiple Позволяет выбрать несколько значений
одновременно. В этом случае value становится массивом.
<Autocomplete
multiple
options={options}
value={value}
onCha nge={(event, newValue) => setValue(newValue)}
renderInput={(params) => <TextField {...params} label="Выберите фрукты" />}
/>freeSolo Разрешает ввод значений, отсутствующих в списке опций.
Для интеграции с серверными API можно использовать состояние для хранения результатов и эффекты для загрузки данных:
const [options, setOptions] = React.useState([]);
const [inputValue, setInputValue] = React.useState('');
React.useEffect(() => {
if (inputValue === '') return;
fetch(`https://api.example.com/search?q=${inputValue}`)
.then(res => res.json())
.then(data => setOptions(data.results));
}, [inputValue]);
<Autocomplete
options={options}
inputValue={inputValue}
onInputCha nge={(event, newInputValue) => setInputValue(newInputValue)}
renderInput={(params) => <TextField {...params} label="Поиск" />}
getOptionLabel={(option) => option.name}
/>
<Autocomplete
options={options}
renderOption={(props, option) => (
<li {...props}>
<strong>{option.name}</strong> - дополнительная информация
</li>
)}
renderInput={(params) => <TextField {...params} label="Фрукты" />}
/>
MUI предоставляет встроенные методы для фильтрации:
<Autocomplete
options={options}
filterOptions={(options, state) =>
options.filter(option => option.name.toLowerCase().startsWith(state.inputValue.toLowerCase()))
}
renderInput={(params) => <TextField {...params} label="Фрукты" />}
/>
autoHighlight — автоматически подсвечивает первую подходящую опцию.
autoSelect — автоматически выбирает значение при нажатии Enter.
Autocomplete удобно использовать с библиотеками для управления формами, например, Formik или React Hook Form:
<Controller
name="fruit"
control={control}
render={({ field }) => (
<Autocomplete
{...field}
options={options}
getOptionLabel={(option) => option.name}
onCha nge={(event, value) => field.onChange(value)}
renderInput={(params) => <TextField {...params} label="Фрукты" />}
/>
)}
/>
<Autocomplete
options={options}
renderInput={(params) => (
<TextField
{...params}
label="Фрукты"
sx={{ '& .MuiInputBase-root': { bgcolor: 'lightyellow' } }}
/>
)}
/>
Autocomplete в MUI — гибкий инструмент, подходящий для поиска, фильтрации и выбора данных как из локальных массивов, так и с серверных API, с возможностью полной кастомизации визуального и функционального поведения.