From a0534b5aab42a96a6f2e9fee9898e11f7a9b2cff Mon Sep 17 00:00:00 2001 From: Harry Whorlow Date: Fri, 22 Nov 2024 19:32:18 +0100 Subject: [PATCH] fix(core): stop onChange triggering onMount and add tests to assert this --- packages/form-core/src/FieldApi.ts | 11 ++++++----- packages/form-core/tests/FieldApi.spec.ts | 23 +++++++++++++++++++++++ 2 files changed, 29 insertions(+), 5 deletions(-) diff --git a/packages/form-core/src/FieldApi.ts b/packages/form-core/src/FieldApi.ts index c9c076e05..49a72d235 100644 --- a/packages/form-core/src/FieldApi.ts +++ b/packages/form-core/src/FieldApi.ts @@ -551,11 +551,6 @@ export class FieldApi< this.prevState = state this.state = state - - this.options.listeners?.onChange?.({ - value: state.value, - fieldApi: this, - }) }, }, ) @@ -701,6 +696,12 @@ export class FieldApi< */ setValue = (updater: Updater, options?: UpdateMetaOptions) => { this.form.setFieldValue(this.name, updater as never, options) + + this.options.listeners?.onChange?.({ + value: updater as never, + fieldApi: this, + }) + this.validate('change') } diff --git a/packages/form-core/tests/FieldApi.spec.ts b/packages/form-core/tests/FieldApi.spec.ts index 6ce17b716..a250bcc29 100644 --- a/packages/form-core/tests/FieldApi.spec.ts +++ b/packages/form-core/tests/FieldApi.spec.ts @@ -956,6 +956,29 @@ describe('field api', () => { expect(triggered).toStrictEqual('other') }) + it('should not run the listener onChange on mount', () => { + const form = new FormApi({ + defaultValues: { + name: 'test', + }, + }) + + let triggered!: string + const field = new FieldApi({ + form, + name: 'name', + listeners: { + onChange: ({ value }) => { + triggered = value + }, + }, + }) + + field.mount() + + expect(triggered).toStrictEqual(undefined) + }) + it('should run listener onBlur', () => { const form = new FormApi({ defaultValues: {