reactjs - react-hook-form 提交后无法正确验证 value 和 onChange
问题描述
我有组件:
const FormComponent = () => {
const { register, handleSubmit, errors } = useForm();
const [val, setVal] = useState("");
const handleSubmitForm = () => console.log("send!");
const handleChange = (e) => {
setVal(e.target.value);
};
return (
<form onSubmit={handleSubmit(handleSubmitForm)}>
<input
type="text"
name="test"
value={val}
ref={register({ required: "The field is required." })}
onChange={handleChange}
/>
{errors.test && errors.test.message}
<button type="submit">Send</button>
</form>
);
};
当我单击“提交”时,react-hook-form
显示错误消息:“该字段是必填项。'。当我想写单词“TEST”,接下来我尝试删除这个文本,例如选择所有文本并单击 Backspace 按钮,然后我无法从输入中删除这个文本,但显示有关空值的消息。
我如何使用react-hook-form
和value
事件onChange
?
解决方案
不需要有 value 和 onChange。您可以使用不受控制的形式,如果您需要其中一个输入的值,您可以简单地观察它;-)
const FormComponent = () => {
const { register, handleSubmit, watch, errors } = useForm();
const handleSubmitForm = (data) => console.log(data);
const valueOfTest = watch('test');
useEffect(() => {
//consider this to be onchange function
doSomething(valueOfTest);
}, [valueOfTest]);
return (
<form onSubmit={handleSubmit(handleSubmitForm)}>
<input
type="text"
name="test"
ref={register({ required: "The field is required." })}
/>
{errors.test && errors.test.message}
<button type="submit">Send</button>
</form>
);
};
推荐阅读
- jenkins - 与多个环境变量关联的 Jenkins 扩展选择参数
- javascript - 使用带有 Webpack 的 watch 时如何忽略文件夹
- vue.js - 如何在 vue 组合 API 中使用路由器?
- java - 从带有流java 8的列表中搜索包含寄存器内部分文本的寄存器
- pyspark - 不使用 AAD 应用程序的 PySpark Kusto 连接器
- azure - 事件中心 - 密钥保管库
- c# - 如何在 C# 中使用服务主体(clientId 和 clientSecret)为 Azure Data Lake Store(Gen-2)创建 SAS 令牌?
- javascript - 如何在点击事件中使用 _ 属性访问值
- python - Reddit 机器人:随机回复评论
- python - 使用 utf-8 编码将 ElementTree 直接写入 zip