主题
最佳实践
在实际开发中使用 Yup,可以遵循一些最佳实践,提高代码可维护性和验证效率。
导入方式
js
import { object, string, number, array, boolean } from 'yup';
1. 定义复用 Schema
js
const nameSchema = string().required('姓名不能为空');
const ageSchema = number().required('年龄不能为空').positive().integer();
const userSchema = object({
name: nameSchema,
age: ageSchema
});
- 将重复使用的字段验证抽离成单独 Schema
- 提高复用性和可读性
2. 使用链式调用清晰规则
js
const emailSchema = string()
.required('邮箱不能为空')
.email('邮箱格式不正确')
.max(50, '邮箱长度不能超过50');
- 链式调用直观
- 避免多次调用 validate
3. 尽量使用异步验证处理远程校验
js
const usernameSchema = string().test('unique', '用户名已存在', async (value) => {
return !(await checkUsernameExists(value));
});
- 异步验证适合远程校验
- Yup 自动处理 Promise,避免阻塞 UI
4. 使用 when
实现动态规则
js
const schema = object({
age: number().required(),
guardian: string().when('age', {
is: (val) => val < 18,
then: string().required('未成年必须填写监护人')
})
});
- 避免写复杂的 if/else 校验逻辑
- Yup 提供灵活的条件验证
5. 捕获并显示错误信息
js
try {
await userSchema.validate(data, { abortEarly: false });
} catch (err) {
console.log(err.errors); // 显示所有错误
}
- 使用
abortEarly: false
捕获全部错误 - 有助于在表单中一次性显示所有验证问题
小结
- 抽离复用 Schema
- 链式调用清晰直观
- 异步验证处理远程校验
- 动态规则用
when
实现 - 捕获全部错误提升用户体验