материал-автозаполнение пользовательского интерфейса, завернутый в контроллер формы реагирования, не может получить значение

#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, правильно ли это?