#material-ui #react-hook-form
#материал-пользовательский интерфейс #реакция-крючок-форма
Вопрос:
Я не могу получить значение поля react-hook-form <Controller />
, завернутое в функцию onSubmit. Чего не хватает? другое поле работает правильно
const onSubmit = async (data,e) => {
console.log("DATA" , data)
//data.groups is always undefined
...
}
<form onSubmit={handleSubmit(onSubmit)}>
<Controller
name="groups"
control={control}
as={() => (
<Autocomplete multiple options={fbGroupsData.Group} getOptionLabel={option => option.name} renderInput={(params) =>(<TextField {...params} variant="outlined" label="Groups" placeholder="Groups" />)}/>
)}
/>
<TextField fullWidth inputRef={register} InputLabelProps={{ shrink: true }} name="name" label="Name" variant="outlined" />
</form>
Ответ №1:
В документе есть пример: https://codesandbox.io/s/react-hook-form-v6-controller-qsd8r который было рекомендовано использовать render
вместо prop as
:
<Controller
render={(props) => (
<Autocomplete
{...props}
options={countries}
getOptionLabel={(option) => option.label}
renderOption={(option) => (
<span>
{countryToFlag(option.code)}
{option.label}
</span>
)}
renderInput={(params) => (
<TextField
{...params}
label="Choose a country"
variant="outlined"
/>
)}
onChange={(_, data) => props.onChange(data)}
/>
)}
name="country"
control={control}
/>
Комментарии:
1. что я забыл
onChange={(_, data) => props.onChange(data)}
, так это то, что я думал, что в этом нет необходимости, потому что я использовал только метод onSubmit и не устанавливал никакого состояния. Но здесь его цель не устанавливает состояние компонента, а делает состояние внутреннего текстового поля изменяемым до контроллера и делает его значение доступным для метода onSubmit, правильно ли это?