javascript 如何在此React应用中向自定义表单验证规则添加消息?

lyr7nygr  于 2023-09-29  发布在  Java
关注(0)|答案(2)|浏览(98)

我正在使用React 18和Firebase 9开发一个聊天应用程序。
我使用**Simple Body Validator**进行(更干净的)表单验证。
Register 表单中,我有一个file类型的输入,用于上传用户头像。
我需要限制可以上传到 *JPEG和PNG文件只 *。
为此目的:
Register.jsx组件中,我有:

  1. import { make, register } from "simple-body-validator";
  2. // Custom validation rule
  3. register('image-only', function (value) {
  4. let allowedFormats = ["jpg", "jpeg", "png"];
  5. let format = value.name.split('.')[1].toLowerCase();
  6. return allowedFormats.includes(format);
  7. });
  8. export default function Register() {
  9. const initialFormData = {
  10. firstName: "",
  11. lastName: "",
  12. email: "",
  13. avatar: "",
  14. password: "",
  15. password_confirmation: ""
  16. };
  17. // Apply validation rules
  18. const validationRules = {
  19. firstName: ["required", "string", "min:3", "max:255"],
  20. lastName: ["required", "string", "min:3", "max:255"],
  21. email: ["required", "email"],
  22. avatar: ["image-only"],
  23. password: ["required", "min:6", "confirmed"],
  24. password_confirmation: ["required"]
  25. };
  26. return (
  27. <FormCard title="Register">
  28. <form onSubmit={handleSubmit}>
  29. <div
  30. className={`mb-2 form-element ${errors.has("avatar") ? "has-error" : null
  31. }`}
  32. >
  33. <label for="avatar" className="form-label">
  34. Avatar
  35. </label>
  36. <input
  37. type="file"
  38. id="avatar"
  39. name="avatar"
  40. onChange={handleChange}
  41. className="form-control form-control-sm"
  42. />
  43. {errors.has("avatar") ? (
  44. <p className="invalid-feedback">{errors.first("avatar")}</p>
  45. ) : null}
  46. </div>
  47. </form>
  48. </FormCard>
  49. );
  50. }

问题
尽管不允许的格式被排除在外,但正如预期的那样,没有验证错误消息和 * 我不知道如何添加它 *。

提问

如何将消息添加到已创建的自定义验证规则中?

vawmfj5a

vawmfj5a1#

这就是我的工作:

  1. register('image-only', function (value) {
  2. let allowedFormats = ["jpg", "jpeg", "png"];
  3. let format = value.name.split('.')[1].toLowerCase();
  4. return allowedFormats.includes(format);
  5. }, function() {
  6. return "Only JPG, JPEG, and PNG files are allowed.";
  7. });
xzlaal3s

xzlaal3s2#

在您的自定义验证规则'image-only'中,您只返回一个布尔值来指示验证通过还是失败。要添加自定义消息,您需要返回一个对象,该对象包括规则是否通过以及如果没有通过,错误消息应该是什么。
以下是如何调整仅图像规则:

  1. register('image-only', function (value) {
  2. let allowedFormats = ["jpg", "jpeg", "png"];
  3. let format = value.name.split('.')[1].toLowerCase();
  4. let isValid = allowedFormats.includes(format);
  5. return {
  6. passed: isValid,
  7. message: isValid ? "" : "Hold up! Only JPG, JPEG, and PNG files are allowed."
  8. };
  9. });

handleSubmit函数应该查看这些验证结果并相应地设置状态。例如,如果验证失败,您应该更新组件的状态,以便可以显示错误消息。

  1. function handleSubmit(event) {
  2. event.preventDefault();
  3. // Validate that form!
  4. const errors = make(validationRules, initialFormData);
  5. // Update your state with any errors
  6. setErrors(errors);
  7. // If we're all good, go ahead and submit the form
  8. if (Object.keys(errors).length === 0) {
  9. // Proceed with whatever your form is supposed to do
  10. }
  11. }

最后是渲染。您已经得到了一段JSX代码,它检查“avatar”字段是否有错误并显示它。只要确保这部分按预期工作即可。

展开查看全部

相关问题