主题
异步验证
Yup 支持异步验证,可以在校验过程中调用异步函数,例如检查用户名是否已存在。
导入方式
js
import { string } from 'yup';
异步验证示例
js
const schema = string().required().test(
'check-username',
'用户名已存在',
async (value) => {
const exists = await fakeApiCheckUsername(value);
return !exists;
}
);
// 模拟异步 API
async function fakeApiCheckUsername(username) {
const existingUsers = ['Alice', 'Bob'];
return existingUsers.includes(username);
}
test(name, message, fn)
:自定义验证函数- 函数可以返回 Promise
- Yup 会等待 Promise 完成,然后判断验证结果
使用 validate 方法
js
schema.validate('Alice')
.then(() => console.log('验证通过'))
.catch(err => console.log(err.errors));
validate
默认返回 Promise- 异步验证和同步验证逻辑一致,只是异步需使用
then/catch
或async/await
小结
- 异步验证适合检查数据库、接口或远程资源
- 使用
test
+ 异步函数即可实现 - Yup 会正确处理 Promise,保证验证结果可靠