演示字段间的依赖关系:当一个字段变化时,自动重新验证依赖它的其他字段。
💡 修改"邮箱"或"密码"字段,观察确认字段的自动重新验证
const form = useFormState({
fields: {
password: {
validator: Validators.minLength(8)
},
confirmPassword: {
validator: passwordMatchValidator,
// 当 password 变化时,自动重新验证此字段
dependencies: ['password']
},
orderTotal: {
validator: Validators.min(0)
},
discountCode: {
validator: discountCodeValidator,
// 当 orderTotal 变化时,自动重新验证此字段
dependencies: ['orderTotal']
}
}
});// 密码确认验证器
const passwordMatchValidator = createValidator(
(value, allValues) => {
if (value !== allValues.password) {
return '两次密码不一致';
}
return null;
}
);
// 折扣码验证器(依赖订单金额)
const discountCodeValidator = createValidator(
async (value, allValues) => {
const total = allValues.orderTotal as number;
// 金额 < 100 时不验证
if (total < 100) return null;
// 金额 >= 100 时必须填写
if (!value) {
return '订单金额超过100时,必须输入折扣码';
}
// 异步验证折扣码有效性
const isValid = await checkDiscountCode(value);
return isValid ? null : '无效的折扣码';
}
);