javascript - 当文本输入中的数据设置如下时如何停止显示错误:value={value} React Hook Form
问题描述
React Hook Forms 检测到我在输入内容时更改了文本输入的值(onChange)。但是如果我将数据输入到输入中,它也能检测到变化value={value}
吗?
const validator = register(name);
我需要类似的东西
onValueSet={(e) => {
validator.onChange(e);
}}
我的意思是,如果我只是设置数据,value={value}
我会收到一个错误,即需要此输入。我不想要这个错误,因为数据是由value={value}
.
这是我的输入:
<StyledInput
name={name}
maxLength={100}
value={value}
onChange={(e) => {
validator.onChange(e);
}}
/>
和我的验证模式:
const validationSchema = Yup.object().shape({
first_name: Yup.string()
.required("required"),
});
解决方案
您必须在reset
此处使用并在收到初始表单数据时调用它。我假设您正在执行 api 调用并希望将结果设置为表单。您可以使用 来执行此操作useEffect
,观察数据何时解析,然后使用实际值重置表单。这样您就不必通过value
prop 设置值并让 RHF 管理输入的状态。你也不需要设置name
prop,因为 RHF 的register
调用也会返回这个 prop。
const Component = (props) => {
const { result } = useApiCall();
const { register, reset } = useForm();
useEffect(() => {
reset(result)
}, [result]);
return (
...
<StyledInput
{...register('first_name')}
maxLength={100}
/>
...
)
}
这是一个小 CodeSandbox 演示您的用例:
推荐阅读
- graph - Flink Gelly 在计算期间更新图
- c++ - Qt C++ 图形视图在单击时获取鼠标位置
- javascript - 如何将 HTML 表单数据添加到 mailto 链接
- firebase - Office 365 高级威胁防护正在标记我的 Firebase 身份验证电子邮件
- c - 字符字 [] 与字符字 [5]
- visual-studio-code - Visual Studio 代码和 GAMS
- c# - 如何在单词标题对象的一行文本中添加带下划线的单词?
- xamarin - Xamarin Forms:以编程方式添加的 AbsoluteLayout 不在 iOS 上呈现
- javascript - sencha extjs 在 storemanager 完成加载后运行?
- xamarin.forms - 用户能否在等待的 DisplayAlert 期间导航离开