
本文介绍了如何结合 Formik 和 Yup 在 React 表单中实现更灵活的错误信息展示,特别是针对密码等字段,可以同时显示多个验证错误。通过自定义 Yup 的 test 方法,我们可以捕获所有不符合规则的错误信息,并将它们一次性返回给 Formik,从而实现多重错误信息的同步展示。
在使用 Formik 和 Yup 进行表单验证时,默认情况下,Yup 会在遇到第一个错误时停止验证,并返回该错误信息。但在某些场景下,例如密码字段,我们可能希望同时展示所有不符合规则的错误信息,以帮助用户更快速地了解密码的复杂性要求。
以下是如何使用 Yup 的 test 方法来实现这一目标:
import * as Yup from 'yup';
import { useFormik } from 'formik';
const validationSchema = Yup.object({
email: Yup.string().required("Required field").email("Invalid email format"),
password: Yup.string()
.required("Required field password")
.test({
test: (value) => {
let errors = [];
if (!/^(?=.{8,})/.test(value)) {
errors.push("Must Contain 8 Characters");
}
if (!/^(?=.*[!@#\$%\^&\*])/.test(value)) {
errors.push("One Special Case Character");
}
if (!/^(?=.*[0-9])/.test(value)) {
errors.push("One Number");
}
if (!/^(?=.*[a-z])/.test(value)) {
errors.push("One Lowercase");
}
if (!/^(?=.*[A-Z])/.test(value)) {
errors.push("One Uppercase");
}
if (errors.length > 0) {
throw new Yup.ValidationError({
errors: errors,
inner: true,
path: "password",
message: errors,
value: value,
name: "ValidationError",
});
}
return true;
},
}),
});
const MyForm = () => {
const formik = useFormik({
initialValues: {
email: '',
password: '',
},
validationSchema: validationSchema,
onSubmit: (values) => {
alert(JSON.stringify(values));
},
});
const { errors, touched, getFieldProps } = formik;
return (
<form onSubmit={formik.handleSubmit}>
<div>
<label htmlFor="email">Email</label>
<input
id="email"
type="email"
{...getFieldProps('email')}
/>
{touched.email && errors.email ? (
<div>{errors.email}</div>
) : null}
</div>
<div>
<label htmlFor="password">Password</label>
<input
id="password"
type="password"
{...getFieldProps('password')}
/>
{touched.password && errors.password ? (
<div>
{Array.isArray(errors.password) ? (
errors.password.map((error, index) => (
<div key={index}>{error}</div>
))
) : (
<div>{errors.password}</div>
)}
</div>
) : null}
</div>
<button type="submit">Submit</button>
</form>
);
};
export default MyForm;
代码解释:
注意事项:
总结:
通过自定义 Yup 的 test 方法,我们可以实现更灵活的表单验证逻辑,并能够同时展示多个错误信息。这种方法特别适用于密码等需要满足多个规则的字段,可以有效地提升用户体验。
以上就是使用 Formik 和 Yup 实现 React 表单多重错误信息展示的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号