react-hook-form 无法通过单击按钮重置输入来查看更改值
react-hook-form can't see change value by click on button to reset input
带输入和重置输入按钮的组件TexInputComponent
:
<input
type={type}
name={name}
ref={register}
/>
<button
type="button"
onClick={clearInput}>
Reset input
</button>
const clearInput = () => {
document.querySelector(`#${name}`).value = null;
};
我在另一个组件中使用 TexInputComponent
内部表单:
<TexInputComponent
name="title"
defaultValue={data?.title}
register={register({ required: 'Title is required.' })}
error={errors.title}
/>
现在,当我在表单 react-hook-form
return 上单击提交时,出现错误,例如 'Title is required!'。当我在 TexInputComponent
中写东西时,错误消失了。
问题是当我写文本并单击按钮以重置输入时。 clearInput
方法被执行(此方法将 value
更改为 null
)现在应该显示错误,但我认为反应挂钩形式看不到值变化。
我该如何解决?
您的 clearInput()
不起作用,因为您没有提供唯一 ID,所以它找不到要重置的输入元素。所以改为:
<input
id={name} // --> add this line to fix
type={type}
name={name}
ref={register}
/>
然而,还有其他方法可以轻松重置表单,而无需定义您自己的重置方法:
使用 <input type='reset' />
创建一个重置按钮,重置表单中的所有字段。
使用 useForm
挂钩中的 reset()
函数来重置特定字段:
const { register, reset } = useForm();
return (
<form onSubmit={handleSubmit(onSubmit)}>
<label>First name</label>
<input type="text" name="firstName" ref={register} />
<label>Last name</label>
<input type="text" name="lastName" ref={register} />
<input type="submit" />
<button
type="button"
onClick={() => reset({ firstName: "default name" })}
>
Reset first name
</button>
</form>
);
带输入和重置输入按钮的组件TexInputComponent
:
<input
type={type}
name={name}
ref={register}
/>
<button
type="button"
onClick={clearInput}>
Reset input
</button>
const clearInput = () => {
document.querySelector(`#${name}`).value = null;
};
我在另一个组件中使用 TexInputComponent
内部表单:
<TexInputComponent
name="title"
defaultValue={data?.title}
register={register({ required: 'Title is required.' })}
error={errors.title}
/>
现在,当我在表单 react-hook-form
return 上单击提交时,出现错误,例如 'Title is required!'。当我在 TexInputComponent
中写东西时,错误消失了。
问题是当我写文本并单击按钮以重置输入时。 clearInput
方法被执行(此方法将 value
更改为 null
)现在应该显示错误,但我认为反应挂钩形式看不到值变化。
我该如何解决?
您的 clearInput()
不起作用,因为您没有提供唯一 ID,所以它找不到要重置的输入元素。所以改为:
<input
id={name} // --> add this line to fix
type={type}
name={name}
ref={register}
/>
然而,还有其他方法可以轻松重置表单,而无需定义您自己的重置方法:
使用
<input type='reset' />
创建一个重置按钮,重置表单中的所有字段。使用
useForm
挂钩中的reset()
函数来重置特定字段:
const { register, reset } = useForm();
return (
<form onSubmit={handleSubmit(onSubmit)}>
<label>First name</label>
<input type="text" name="firstName" ref={register} />
<label>Last name</label>
<input type="text" name="lastName" ref={register} />
<input type="submit" />
<button
type="button"
onClick={() => reset({ firstName: "default name" })}
>
Reset first name
</button>
</form>
);