Если у вас есть простые элементы (не объекты, а только строки), и вам не нужно обрабатывать состояние (ваше автозаполнение не контролируется), вы можете использовать freeSolo
опору Autocomplete
.
<Autocomplete
multiple
freeSolo
id="tags-outlined"
options={["foo", "bar"]}
defaultValue={["foo", "bar"]}
renderInput={params => (
<TextField
{...params}
variant="outlined"
label="filterSelectedOptions"
placeholder="Favorites"
/>
)}
/>
В случае, если ваши элементы более сложны, и вам необходимо контролировать элемент:
1. Убедитесь, что тег Autocomplete является контролируемым (вам удается оценить).
- Прослушивание события нажатия клавиши на TextField.
- Если ключ
enter
(keyCode === 13
) - возьмите значение ввода и pu sh в список текущих значений, которые у вас есть. - Убедитесь, что Вы также обрабатываете
onChange
для удаления элементов:
Вот код:
const [autoCompleteValue, setAutoCompleteValue] = useState(["foo", "bar"]);
return (
<Autocomplete
multiple
id="tags-outlined"
options={[]}
value={autocompleteValue}
onChange={(e, newval, reason) => {
setAutoCompleteValue(newval);
}}
renderInput={params => (
<TextField
{...params}
variant="outlined"
label="filterSelectedOptions"
placeholder="Favorites"
onKeyDown={e => {
if (e.keyCode === 13 && e.target.value) {
setAutoCompleteValue(autocompleteValue.concat(e.target.value));
}
}}
/>
)}
/>
);
Проверьте пример работающего в реальном времени обоих вариантов: https://codesandbox.io/s/mui-autocomplete-create-options-on-enter-gw1jc