在使用Material-UI的自动完成组件(Autocomplete)与React Hook Form结合时,可能会遇到无法获取输入值的问题。这通常是因为React Hook Form的控制器(Controller)组件没有正确地与Material-UI的Autocomplete组件集成。
当使用Controller组件包装Autocomplete时,需要确保正确设置了name
属性和control
属性。如果这些属性设置不正确,React Hook Form将无法正确地获取和更新表单值。
以下是一个示例代码,展示了如何将Material-UI的Autocomplete组件与React Hook Form的Controller组件正确集成:
import React from 'react';
import { useForm } from 'react-hook-form';
import { Controller, TextField } from '@hookform/react-hooks';
import { Autocomplete } from '@mui/material';
import { TextFieldProps } from '@mui/material/TextField';
type OptionType = {
label: string;
};
const options = [
{ label: 'Option 1' },
{ label: 'Option 2' },
{ label: 'Option 3' },
];
const MyForm = () => {
const { control, handleSubmit, formState: { errors } } = useForm();
const onSubmit = (data) => {
console.log(data);
};
return (
<form onSubmit={handleSubmit(onSubmit)}>
<Controller
name="autocomplete"
control={control}
defaultValue=""
render={({ field }) => (
<Autocomplete
{...field}
options={options}
getOptionLabel={(option) => option.label}
renderInput={(params) => (
<TextField
{...params}
label="Choose an option"
variant="outlined"
error={!!errors.autocomplete}
helperText={errors.autocomplete?.message}
/>
)}
/>
)}
/>
<button type="submit">Submit</button>
</form>
);
};
export default MyForm;
Controller
组件包裹Autocomplete
组件,并传递control
和name
属性。Controller
的render
属性中,将Autocomplete
组件的属性解构并传递给它。TextFieldProps
类型来确保renderInput
函数中的params
参数具有正确的类型。通过以上步骤,你应该能够成功地将Material-UI的Autocomplete组件与React Hook Form集成,并正确获取输入值。
领取专属 10元无门槛券
手把手带您无忧上云