Я пытаюсь использовать Material-UI Autocomplete
в качестве множественного ввода с react-hook-form
и control
defaultValues
автозаполнения динамически (визуализировать компонент предварительно заполненным при редактировании данных на основе уже сохраненных данных, извлеченных из базы данных).
Итак, главный вопрос:
Как лучше всего контролировать значения по умолчанию в компоненте Material-UI Autocomplete
и использовать его с react-hook-form
?
Что я сделал на данный момент:
Используя функции и хуки в React, я обернул компонент Autocomplete в React Hook Form
Controller
для управления состоянием. Я попытался реализовать решения из документации MUI иreact-hook-form
и решения следующих потоков.
Что он делает
Когда я устанавливаю defaultValue
в Controller
, он отображает контролируемое значение по умолчанию, но выдает ошибку: TypeError: Cannot read property 'filter' of undefined
<Controller
as={
<Autocomplete
multiple
value={defaultValues}
onChange={(e, values) => setValue("food", values)}
...
renderInput={params => ( ... )}
/>
}
control={control}
name="food"
defaultValue={defaultValues} // <- this makes the error
/>
Когда я не устанавливаю defaultValue
в Controller
, он отлично работает, чтобы иметь возможность выбирать multiple
значения, как ожидалось, но не показывает значение по умолчанию.
Что сбивает с толку, так это то, что Autocomplete
должен управляться с помощью value/onChange
, а Controller
должен управляться с помощью defaultValue/setValue
, и, похоже, они конфликтуют в моем случае.
Лучше работает при установке
defaultValue={ [] }
и использованииuseEffect
и управлении значением по умолчанию только сsetValue("food", defaultOption);
Благодаря ответу Билла я изменил код на renderProp, как это предлагается в документации:
Теперь это работает как шарм, но мне пришлось установить опору
onChange
дляAutocomplete
следующим образом:onChange={(e, values) => setValue("food", values)}
вместо того, что предлагали сделать документы: (используя переданный onChange)
onChange={e => props.onChange(e.something)}
Это работает, но правильно ли это комбинировать
Autocomplete
иreact-hook-form
?
Сравните вопросы с этими темами:
Основное отличие от других потоков, которые я пытаюсь сделать, - установить defaultValues
из multiple Autocomplete
.
Правильный способ использования response-hook- Контроллер формы с автозаполнением Material-UI
"defaultValue" MUI Autocomplete не работает при использовании с Контроллер react-hook-form
Почему начальное значение не задано в Material UI Autocomplete с помощью формы response-hook?
Рекомендуемое решение в документации react-hook-form
:
https://react-hook-form.com/api/#Controller
И код из Material UI
docs:
https://material-ui.com/components/autocomplete/#multiple-values < / а>