我正在使用React 18和Firebase 9开发一个聊天应用程序。
我使用**Simple Body Validator**进行(更干净的)表单验证。
在 Register 表单中,我有一个file类型的输入,用于上传用户头像。
我需要限制可以上传到 *JPEG和PNG文件只 *。
为此目的:
在Register.jsx
组件中,我有:
import { make, register } from "simple-body-validator";
// Custom validation rule
register('image-only', function (value) {
let allowedFormats = ["jpg", "jpeg", "png"];
let format = value.name.split('.')[1].toLowerCase();
return allowedFormats.includes(format);
});
export default function Register() {
const initialFormData = {
firstName: "",
lastName: "",
email: "",
avatar: "",
password: "",
password_confirmation: ""
};
// Apply validation rules
const validationRules = {
firstName: ["required", "string", "min:3", "max:255"],
lastName: ["required", "string", "min:3", "max:255"],
email: ["required", "email"],
avatar: ["image-only"],
password: ["required", "min:6", "confirmed"],
password_confirmation: ["required"]
};
return (
<FormCard title="Register">
<form onSubmit={handleSubmit}>
<div
className={`mb-2 form-element ${errors.has("avatar") ? "has-error" : null
}`}
>
<label for="avatar" className="form-label">
Avatar
</label>
<input
type="file"
id="avatar"
name="avatar"
onChange={handleChange}
className="form-control form-control-sm"
/>
{errors.has("avatar") ? (
<p className="invalid-feedback">{errors.first("avatar")}</p>
) : null}
</div>
</form>
</FormCard>
);
}
问题
尽管不允许的格式被排除在外,但正如预期的那样,没有验证错误消息和 * 我不知道如何添加它 *。
提问
如何将消息添加到已创建的自定义验证规则中?
2条答案
按热度按时间vawmfj5a1#
这就是我的工作:
xzlaal3s2#
在您的自定义验证规则'image-only'中,您只返回一个布尔值来指示验证通过还是失败。要添加自定义消息,您需要返回一个对象,该对象包括规则是否通过以及如果没有通过,错误消息应该是什么。
以下是如何调整仅图像规则:
handleSubmit函数应该查看这些验证结果并相应地设置状态。例如,如果验证失败,您应该更新组件的状态,以便可以显示错误消息。
最后是渲染。您已经得到了一段JSX代码,它检查“avatar”字段是否有错误并显示它。只要确保这部分按预期工作即可。