源文件超过50行,已替换为不超过50行的伪代码。辅助函数为逻辑抽象,不直接执行。
1function onBlur(field) {2 field.touched = true;3 validateField(field);4 // 失焦后启用后续输入校验。5 field.validateOnChange = true;6}78function onChange(field, value) {9 field.value = value;10 if (field.validateOnChange) validateField(field);11}1213async function submitForm(fields, onSubmit) {14 formState.submitting = true;15 try {16 const results = await Promise.all(fields.map(validateField));17 if (results.some(result => !result.valid)) return;18 await onSubmit(readValues(fields));19 } finally {20 formState.submitting = false;21 }22}2324function resetForm(fields) {25 for (const field of fields) {26 field.value = field.initialValue;27 field.touched = false;28 field.error = null;29 field.validating = false;30 }31}已确认说明
- 表单字段由独立状态及schema校验组成
- 提交先并发验证全部字段
- 表单reset同时重置验证时机
- 校验错误转换成当前语言消息