![](/img/trans.png)
[英]How can I use yup validationSchema with react-hook-form?
[英]React hook form: How to can I use onChange on React Hook Form Version 7.0
以前我曾经这样写:
<input className="form-control" name="productImage" type='file' onChange={handleImageUpload} ref={register({ required: true })} />
更新后我必须这样写:
<input className="form-control" type="file" {...register('productImage', { required: true })} />
如何在更新版本的 React Hook Form 上使用onChange={handleImageUpload}
? 这是迁移文档
请原谅我在提问方式上的错误。 我对这些东西很陌生。 谢谢你。
您只需在{...register(...)}
之后移动onChange
道具
<input
className="form-control"
type="file"
{...register("productImage", { required: true })}
onChange={handleImageUpload}
/>
https://github.com/react-hook-form/react-hook-form/releases/tag/v7.16.0
V7.16.0 引入了这个新的 API 用于自定义onChange
。
<input
type="text"
{...register('test', {
onChange: (e) => {},
onBlur: (e) => {},
})}
/>
被同样的问题困住了。 对我来说,问题是我的onChange高于 react-hook-form 的{...register}并将其移动到寄存器下方为我解决了问题!
我最近在迁移到 V7 时遇到了类似的问题。 如果它可以帮助任何人。
处理表单的父组件将寄存器 function 向下传递给包装器,包装器将其再次向下传递到需要在更改时去抖动的输入。
我调用了寄存器formLibraryRef
以防我以后想使用不同的库,但总的来说我必须做类似的事情:
const { onChange, ...rest } = formLibraryRef(inputName);
将 onChange 传递给 function 本身传递给输入的本机 onChange 事件:
const handleDebouncedChange: (event: React.ChangeEvent<HTMLInputElement>) => void = (
event: ChangeEvent<HTMLInputElement>,
) => {
onChange(event);
if (preCallback) {
preCallback();
}
debounceInput(event);
};
然后将 rest 传递给输入:
<input
aria-label={inputName}
name={inputName}
data-testid={dataTestId}
className={`form-control ...${classNames}`}
id={inputId}
onChange={handleDebouncedChange}
onFocus={onFocus}
placeholder={I18n.t(placeholder)}
{...rest}
/>
此处文档中的register
部分: https://react-hook-form.com/migrate-v6-to-v7/提供了有关如何获取 onChange 的更多信息,并显示了Missing ref
的示例。
对我来说,装饰解决方案有效
const fieldRegister = register("productImage", {required: true})
const origOnChange = fieldRegister.onChange
fieldRegister.onChange = (e) => {
const res = origOnChange(e)
const value = e.target.value
// do something with value
return res
}
对于字段声明使用
<input {...fieldRegister}/>
在register
文档https://react-hook-form.com/api/useform/register中,样本存在于Custom onChange, onBlur
部分:
// onChange got overwrite by register method
<input onChange={handleChange} {...register('test')} />
// register's onChange got overwrite by register method
<input {...register('test')} onChange={handleChange}/>
const firstName = register('firstName', { required: true })
<input
onChange={(e) => {
firstName.onChange(e); // method from hook form register
handleChange(e); // your method
}}
onBlur={firstName.onBlur}
ref={firstName.ref}
/>
所以对于你的情况:
const productImageRegister = register("productImage", {required: true})
<input className="form-control"
type="file"
{...productImageRegister }
onChange={e => {
productImageRegister.onChange(e);
handleImageUpload(e);
}} />
您可以使用react-hook-form 控件
<Controller
render={({ field }) => <input onChange={event=>{
handleImageUpload(event);
field.onChange(event);
}} />}
name="image"
control={control}
/>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.