我有一个带有自定义文件输入的表单。我正在使用反应挂钩形式。在过去,我已经能够隐藏默认值<input type="file"/>并添加我自己的自定义按钮,以输入为目标ref.current.click并从那里触发onChange事件。
但是,在尝试使用 react-hook-form 时,它似乎并不那么简单。我的印象是我必须使用Controller组件,useForm但我似乎无法让它工作。
目前,当我单击“添加图像”按钮时,它不会提示我选择文件。
const ImageInput = () => {
const [selectedImage, setSelectedImage] = useState();
const pickImageHandler = async () => {
//I dont know what to ref here??
ref.current.click();
};
const imageChange = (e) => {
console.log("imageChange onChange triggered");
if (e.target.files && e.target.files.length > 0) {
setSelectedImage(e.target.files[0]);
}
};
<>
<Controller
control={control}
render={({ field }) => (
<input
control={control}
type="file"
accept=".jpg,.png,.jpeg"
style={{ display: "none" }}
onChange={imageChange}
{...field}
/>
)}
/>
<Button
type="button"
variant="contained"
className={classes.pickImageButton}
onClick={pickImageHandler}
>
Add Image
</Button>
</>;
};
const PostForm = (props) => {
const submitFunction= async (data) => {
//handle submitForm with formData
}
<form onSubmit={submitFunction}>
<FormProvider {...methods}>
<ImageInput {...register("cardImage")} name="cardImage" />
</FormProvider>
<Button type="submit" className={classes.postButton}>
Post
</Button>
<form/>;
};