Skip to content

Commit

Permalink
fix: form onValueChange validate time series problem
Browse files Browse the repository at this point in the history
  • Loading branch information
rayhomie committed Jan 8, 2025
1 parent 62e9515 commit d33653b
Showing 1 changed file with 32 additions and 25 deletions.
57 changes: 32 additions & 25 deletions src/Form/form.ts
Original file line number Diff line number Diff line change
Expand Up @@ -104,7 +104,14 @@ class Field extends EventEmitter{
if (trigger === 'onChange') {
this.setValue(value);
this.touched = true;
// 触发校验,需要在 onValueChange 之前执行
this.validateTrigger.forEach((item) => {
if (item === trigger) {
this.validate();
}
});
this.emit('valueChange', value);
return;
} else if (trigger === 'didUnmount') {
this.emit('didUnmount');
} else if (trigger === 'deriveDataFromProps') {
Expand Down Expand Up @@ -152,13 +159,13 @@ class Field extends EventEmitter{
}

/**
*
*
* @param rule 修改 Validator
* @param name
* @param required
* @param message
* @param validateMessages
* @returns
* @param name
* @param required
* @param message
* @param validateMessages
* @returns
*/
private transformValidatorRules(name: string, rule: RawRule, required: boolean, label: string, message: string, validateMessages: ValidateMessages) {
let requiredRule = false;
Expand Down Expand Up @@ -285,7 +292,7 @@ class Field extends EventEmitter{

/**
* 得到 Field 校验器状态
* @returns
* @returns
*/
getValidatorStatus(): ValidatorStatus {
const { status, errors } = this.ref.getFormData();
Expand Down Expand Up @@ -356,7 +363,7 @@ class Field extends EventEmitter{

/**
* 重置 Field
* @param initialValue
* @param initialValue
*/
reset(initialValue: Value) {
this.touched = false;
Expand Down Expand Up @@ -446,7 +453,7 @@ export class Form {

/**
* 遍历表单field对象
* @param callback
* @param callback
*/
private eachField(callback: (field: Field, name: string) => void) {
const fields = this.fields;
Expand All @@ -458,7 +465,7 @@ export class Form {

/**
* 设置 rules
* @param rules
* @param rules
*/
private setRules(rules: Rules) {
this.rules = this.transformRules(rules);
Expand Down Expand Up @@ -556,21 +563,21 @@ export class Form {
/**
* 设置 initialValues,这个操作不会对页面进行修改,要是需要重置表单可跟上 reset 方法;
* 这样是对于表单已经在编辑,但是需要重新initialValues的场景
*
* eg:
*
* eg:
* this.setInitialValues(initialValues);
* this.reset();
*
* @param initialValues
*
* @param initialValues
*/
setInitialValues(initialValues: Values) {
this.initialValues = initialValues;
}

/**
* 获取对应字段名的值
* @param name
* @returns
* @param name
* @returns
*/
getFieldValue(name: string) {
const field = this.fields[name];
Expand All @@ -582,8 +589,8 @@ export class Form {

/**
* 获取一组字段名对应的值
* @param nameList
* @returns
* @param nameList
* @returns
*/
getFieldsValue(nameList?: string[]) {
const fieldsValue: Values = {};
Expand All @@ -596,8 +603,8 @@ export class Form {

/**
* 获取对应字段名的校验器状态
* @param name
* @returns
* @param name
* @returns
*/
getFieldValidatorStatus(name: string) {
const field = this.fields[name];
Expand All @@ -609,8 +616,8 @@ export class Form {

/**
* 获取一组字段名的校验器状态
* @param nameList
* @returns
* @param nameList
* @returns
*/
getFieldsValidatorStatus(nameList?: string[]) {
const fieldsValidatorStatus: Record<string, ValidatorStatus> = {};
Expand All @@ -625,7 +632,7 @@ export class Form {
* 设置对应字段名的校验器状态
* @param name 表单名称
* @param validatorStatus 校验状态
* @returns
* @returns
*/
setFieldValidatorStatus(name: string, validatorStatus: ValidatorStatus) {
const field = this.fields[name];
Expand All @@ -638,7 +645,7 @@ export class Form {
/**
* 设置一组字段名的校验器状态
* @param fieldsValidatorStatus 表单校验状态
* @returns
* @returns
*/
setFieldsValidatorStatus(fieldsValidatorStatus: Record<string, ValidatorStatus>) {
Object.keys(fieldsValidatorStatus).forEach(name => {
Expand All @@ -649,7 +656,7 @@ export class Form {
/**
* 检查对应字段是否被用户操作过
* @param name 字段名称
* @returns
* @returns
*/
isFieldTouched(name: string) {
const field = this.fields[name];
Expand Down

0 comments on commit d33653b

Please sign in to comment.