在处理React钩子表单时进行输入字段匹配验证的最佳实践是什么?例如,在匹配电子邮件
输入等时。
在使用React-Hook-form研究电子邮件匹配验证时,发现了一个问题,即试图通过验证方法将错误消息从“耦合元素”中分离出来。ref
只接受一个用于React-hok-form寄存器
的参数,而需要使用useRef
访问current.value
进行值匹配,如下所示:
import React, { useRef } from "react";
import ReactDOM from "react-dom";
import { useForm } from "react-hook-form";
function App() {
const { register, handleSubmit, errors } = useForm();
const inputEmail = useRef(null)
const onSubmit = data => {
console.log('onSubmit: ', JSON.stringify(data))
}
return (
<form onSubmit={handleSubmit(onSubmit)}>
<label htmlFor="email">Email</label>
<input
name="email"
type="email"
ref={inputEmail}
/>
{/* desired: show `email` error message */}
<label htmlFor="email">Email confirmation</label>
<input
name="emailConfirmation"
type="email"
ref={register({
validate: {
emailEqual: value => (value === inputEmail.current.value) || 'Email confirmation error!',
}
})}
/>
{errors.emailConfirmation && <p>{errors.emailConfirmation.message}</p>}
<input type="submit" />
</form>
);
}
const rootElement = document.getElementById("root");
ReactDOM.render(<App />, rootElement);
当进行输入字段匹配时,这个模式似乎是一个选项,但它不能很好地使用React-Hook-form!
例如,错误消息仅与一个输入情况耦合,并且每个独立字段都没有单独的消息,或者其中一个输入字段没有分配给它的寄存器,这意味着没有设置所需的属性...
所以,我正在寻找一个好的实践或模式来解决:
为此,您可以使用Yup
库,这很好:
在实例化useForm
时,将validationSchema
添加到配置对象中,并传递有效的Yup
架构。像这样:
const Schema = yup.object().shape({
email: yup.string().required('Required field'),
emailConfirmation: yup
.string()
.oneOf([yup.ref('email')], 'Emails must match')
.required('Required field'),
});
// How to add it to your useForm
const { register } = useForm({
validationSchema: Schema
})
您的组件应该看起来像这样:
function App() {
const { register, handleSubmit, errors } = useForm({
validationSchema: Schema
});
const onSubmit = data => {
console.log('onSubmit: ', JSON.stringify(data))
}
return (
<form onSubmit={handleSubmit(onSubmit)}>
<label htmlFor="email">Email</label>
<input
name="email"
type="email"
ref={register}
/>
{/* desired: show `email` error message */}
<label htmlFor="email">Email confirmation</label>
<input
name="emailConfirmation"
type="email"
ref={register}
/>
{errors.emailConfirmation && <p>{errors.emailConfirmation.message}</p>}
<input type="submit" />
</form>
);
}
对于inputEmail
,您不需要手动参考。相反,使用getValues
方法获取整个表单的当前值。
const { register, getValues } = useForm()
然后注册这两个输入并从自定义验证调用getValues
。
<input
name="email"
type="email"
ref={register}
/>
<input
name="emailConfirmation"
type="email"
ref={register({
validate: {
emailEqual: value => (value === getValues().email) || 'Email confirmation error!',
}
})}
/>
问题内容: 我是android移动开发的新手(Android Studio本机开发- 新知识)。在这里,我想问一个有关输入验证最佳实践的问题。据我们所知,开发人员何时开发输入表单。我们需要防止用户在文本字段中输入错误的内容。所以这是我的问题 我们可以只为验证目的创建一个Java文件吗?所有输入形式,都只能转到一个验证文件(如果一个应用中有许多输入页面屏幕)。如果 是 ,如何才能得到该技术为我学习学
我最近用react启动了另一个项目,因为我有一点时间来摆弄,我使用了带有挂钩的功能组件。我没有任何问题,只有一件事我不确定我是否正确使用,下面是一个例子: 如果我喜欢每件事的处理方式,我想使用loadData()是肮脏的;就像在前面的例子中,我尝试使用effect来处理如下内容: 但后来我得到了一个警告,比如“loadData应该是useEffect的依赖项”。如果我省略了useEffect的第二
我在jquery中使用ajax调用将用户输入从刀片服务器发送到控制器。 我有一个输入字段 fname代表firstname,lname代表lastname 在我的jquery中,我有一个电话 field是字段的名称,val是用户在输入中输入的值。 updateProfilePage是一个ajax调用 在我的路由文件中,这调用了我的存储函数。我纠结的是如何验证用户输入的值。这是我在控制器中的存储方法
问题内容: 我的联系页面形式如下, 需要为所有字段添加验证。谁能帮我在此反应形式中添加验证? 问题答案: 您应该避免使用refs,可以使用function来实现。 每次更改时,请更新已更改字段的状态。 然后,您可以轻松地检查该字段是否为空或您想要的其他内容。 您可以执行以下操作: 在此示例中,我仅对电子邮件和姓名进行了验证,但是您知道如何进行验证。其余的你可以自己做。 也许有更好的方法,但是您会明
开发Web的一个原则就是,不能信任用户输入的任何信息,所以验证和过滤用户的输入信息就变得非常重要,我们经常会在微博、新闻中听到某某网站被入侵了,存在什么漏洞,这些大多是因为网站对于用户输入的信息没有做严格的验证引起的,所以为了编写出安全可靠的Web程序,验证表单输入的意义重大。 我们平常编写Web应用主要有两方面的数据验证,一个是在页面端的js验证(目前在这方面有很多的插件库,比如Validati
您如何验证有效的 HTML JavaScript 即使我对表单中的其他字段使用相同的方法,对空字段的验证也不起作用。
问题内容: 我正在使用JavaFX和Scene Builder,并且有一个带有文本字段的表单。这些文本字段中的三个从字符串解析为双精度。 我希望它们是学校成绩,因此只能将其设置为1.0到6.0之间。不应允许用户写“ 2.34.4”之类的内容,但可以写“ 5.5”或“ 2.9”之类的内容。 验证已解析字段: 如何测试用户输入的值是否正确? 我已经在Stackoverflow和Google上进行了搜索
问题内容: 问候,我有这个输入字段, 我想在单击提交按钮时调用IsEmpty函数。 我尝试了下面的代码,但是没有用。有什么建议吗? 问题答案: