diff --git a/packages/core/src/__tests__/field.spec.ts b/packages/core/src/__tests__/field.spec.ts index da144d92edc..4685ed13b25 100644 --- a/packages/core/src/__tests__/field.spec.ts +++ b/packages/core/src/__tests__/field.spec.ts @@ -861,7 +861,7 @@ test('setState/getState', () => { }) ) expect(aa.value).toEqual('123') - expect(bb.value).toEqual('123') + expect(bb.value).toBeUndefined() expect(cc.value).toEqual('123') form.setFieldState(form.query('cc'), (state) => { state.value = 'ccc' @@ -1093,7 +1093,7 @@ test('fault tolerance', () => { field.setDisplay('none') expect(field.value).toBeUndefined() field.setValue(321) - expect(field.value).toEqual(321) + expect(field.value).toBeUndefined() field.setDisplay('visible') expect(field.value).toEqual(321) form.setDisplay(null) diff --git a/packages/core/src/__tests__/form.spec.ts b/packages/core/src/__tests__/form.spec.ts index 11111edaa80..554655933aa 100644 --- a/packages/core/src/__tests__/form.spec.ts +++ b/packages/core/src/__tests__/form.spec.ts @@ -440,8 +440,8 @@ test('setState/getState/setFormState/getFormState/setFieldState/getFieldState', name: 'kk', }) ) - expect(oo.value).toEqual(123) - expect(kk.value).toEqual(321) + expect(oo.value).toBeUndefined() + expect(kk.value).toBeUndefined() }) test('validate/valid/invalid/errors/warnings/successes/clearErrors/clearWarnings/clearSuccesses/queryFeedbacks', async () => { @@ -1615,3 +1615,71 @@ test('form clearFormGraph not clear field values', () => { form.clearFormGraph('*', false) expect(form.values.aa).toEqual('123') }) + +// test('form values auto clean with visible false', () => { +// const form = attach( +// createForm({ +// initialValues: { +// aa: '123', +// bb: '321', +// cc: 'cc', +// }, +// }) +// ) +// attach( +// form.createField({ +// name: 'aa', +// }) +// ) +// attach( +// form.createField({ +// name: 'bb', +// reactions: (field) => { +// field.visible = form.values.aa === '1233' +// }, +// }) +// ) +// attach( +// form.createField({ +// name: 'cc', +// }) +// ) + +// expect(form.values).toEqual({ +// aa: '123', +// cc: 'cc', +// }) +// }) + +// test('form values auto clean with visible false in async setInitialValues', () => { +// const form = attach(createForm()) +// attach( +// form.createField({ +// name: 'aa', +// }) +// ) +// attach( +// form.createField({ +// name: 'bb', +// reactions: (field) => { +// field.visible = form.values.aa === '1233' +// }, +// }) +// ) +// attach( +// form.createField({ +// name: 'cc', +// }) +// ) + +// form.setInitialValues({ +// aa: '123', +// bb: '321', +// cc: 'cc', +// }) + +// expect(form.values).toEqual({ +// aa: '123', +// cc: 'cc', +// }) +// }) diff --git a/packages/core/src/models/Field.ts b/packages/core/src/models/Field.ts index 3c89f678674..58d02dcab2c 100644 --- a/packages/core/src/models/Field.ts +++ b/packages/core/src/models/Field.ts @@ -224,8 +224,14 @@ export class Field< () => this.value, (value) => { this.notify(LifeCycleTypes.ON_FIELD_VALUE_CHANGE) - if (isValid(value) && this.selfModified && !this.caches.inputting) { - validateSelf(this) + if (isValid(value)) { + if (this.selfModified && !this.caches.inputting) { + validateSelf(this) + } + if (!this.visible) { + this.caches.value = toJS(value) + this.form.deleteValuesIn(this.path) + } } } ), diff --git a/packages/core/src/shared/internals.ts b/packages/core/src/shared/internals.ts index 8393915d339..76dd91621a7 100644 --- a/packages/core/src/shared/internals.ts +++ b/packages/core/src/shared/internals.ts @@ -986,10 +986,9 @@ export const resetSelf = batch.bound( if (options?.forceClear) { target.value = typedDefaultValue } else { + const initialValue = target.initialValue target.value = toJS( - !isUndef(target.initialValue) - ? target.initialValue - : typedDefaultValue + !isUndef(initialValue) ? initialValue : typedDefaultValue ) } }