Async Validator 异步校验不生效是怎么回事?
我在用 Ant Design 的 Form 表单做用户名重复校验,明明写了 async validator,但输入后完全没触发请求,控制台也没报错,是哪里写错了吗?
我试过把 validator 函数单独提出来,也加了 await,但还是不行。代码大概长这样:
const validateUsername = async (_, value) => {
if (value) {
const res = await fetch(<code>/api/check-username?name=${value}</code>);
const data = await res.json();
if (data.exists) {
return Promise.reject('用户名已存在');
}
}
return Promise.resolve();
};
然后在 rules 里用了 validator: validateUsername,但输完字一点反应都没有……
Form.Item包裹了输入框,并且name属性和验证函数对应字段一致。另外有个容易忽略的地方,就是需要确保
Form的validateTrigger设置正确,默认是 ['change', 'blur'],如果你只想要输入变化时触发,记得明确指定这个属性。再看看你这段代码,异步函数写得没问题,不过可以优化下错误处理。建议在外层加个 try catch,这样即使请求失败也能给出提示:
最后别忘了检查接口地址是否正确,以及服务端是否正常响应。我之前遇到过类似情况,折腾半天才发现原来是 API 地址写错了。
复制过去试试,应该能解决你的问题。