Ant Design的Form表单怎么在提交时校验失败却没提示?
用Antd的Form组件做登录表单,提交时如果校验失败,页面就是没反应,也没看到错误提示
试过手动调用validateFields,但控制台报错”this.form.validateFields is not a function”。代码是这样写的:
const { useForm } = Ant.Design.Form;
const [form] = useForm();
const handleSubmit = () => {
form.validateFields(['username', 'password'])
.then(values => console.log(values))
.catch(info => console.log(info));
};
return (
{/* ...其他表单项 */}
);
按文档应该能捕获错误信息的,但实际提交时页面完全没反应,控制台也没有报错,这是哪里出问题了?
form.validateFields根本没生效,调了等于白调。Ant Design 的
Form必须通过form属性接收useForm()返回的实例,否则它就不知道该用哪个 form 控制,校验自然不触发,也不报错,看起来就像“没反应”。改法很简单,效率更高:
关键点就三个:
1.
—— 这一步不能少,不然 form 实例就断了2. 每个
要有name和rules,不然不知道怎么校验3. 提交时直接调
validateFields(),不需要指定字段也能自动触发表单项的错误提示你现在就能看到红色错误提示了,而且控制台也会输出 catch 里的信息。别忘了 production 环境别漏掉这个 form 传递,不然上线才发现表单失灵就尴尬了。
validateFields不需要传参数就能校验整个表单。改成这样:另外,检查下
Ant.Design.Form的导入路径是不是写错了,应该是import { useForm } from 'antd';。如果还报错,可能版本不对,确保你的antd是4.x以上版本。