From 18b91f8321d577f0626ae5c23253133d15f3a600 Mon Sep 17 00:00:00 2001 From: Janry Date: Wed, 30 Mar 2022 17:13:10 +0800 Subject: [PATCH] fix(core): fix form unmount should not clear values (#2997) --- packages/core/src/__tests__/form.spec.ts | 36 ++++++++++++++++++++++++ packages/core/src/models/BaseField.ts | 4 +-- packages/core/src/models/Form.ts | 2 +- 3 files changed, 39 insertions(+), 3 deletions(-) diff --git a/packages/core/src/__tests__/form.spec.ts b/packages/core/src/__tests__/form.spec.ts index 0ab791fa7d8..a55e485e664 100644 --- a/packages/core/src/__tests__/form.spec.ts +++ b/packages/core/src/__tests__/form.spec.ts @@ -1561,3 +1561,39 @@ test('validator order with format', async () => { ['The field value is required'], ]) }) + +test('form unmount can not effect field values', () => { + const form = attach( + createForm({ + values: { + aa: '123', + }, + }) + ) + attach( + form.createField({ + name: 'aa', + }) + ) + expect(form.values.aa).toEqual('123') + form.onUnmount() + expect(form.values.aa).toEqual('123') +}) + +test('form clearFormGraph need clear field values', () => { + const form = attach( + createForm({ + values: { + aa: '123', + }, + }) + ) + attach( + form.createField({ + name: 'aa', + }) + ) + expect(form.values.aa).toEqual('123') + form.clearFormGraph('*') + expect(form.values.aa).toBeUndefined() +}) diff --git a/packages/core/src/models/BaseField.ts b/packages/core/src/models/BaseField.ts index 6be380bbbbd..a2f0799a504 100644 --- a/packages/core/src/models/BaseField.ts +++ b/packages/core/src/models/BaseField.ts @@ -291,8 +291,8 @@ export class BaseField { this.form.removeEffects(this) } - destroy = () => { - destroy(this.form.fields, this.address.toString()) + destroy = (forceClear = true) => { + destroy(this.form.fields, this.address.toString(), forceClear) } match = (pattern: FormPathPattern) => { diff --git a/packages/core/src/models/Form.ts b/packages/core/src/models/Form.ts index d8d466e1d0c..ba4e1293f6e 100644 --- a/packages/core/src/models/Form.ts +++ b/packages/core/src/models/Form.ts @@ -563,7 +563,7 @@ export class Form { onUnmount = () => { this.notify(LifeCycleTypes.ON_FORM_UNMOUNT) - this.query('*').forEach((field) => field.destroy()) + this.query('*').forEach((field) => field.destroy(false)) this.disposers.forEach((dispose) => dispose()) this.unmounted = true this.indexes = {}