Skip to content

Using onChangeAsync in an array field causes isFieldsValidating to always be true after calling removeValue #2234

Open

Description

@phb-ig

Describe the bug

When using a validators config which has both onChangeListenTo and onChangeAsync in a subfield of an array mode field, removing any entry but the last of the array field will cause the listened-to fields in each shifted entry to be stuck on isValidating: true.

This does not happen when onChangeListenTo is included with onChange.
This does not happen when onChangeListenTo is not included with onChangeAsync.

Possibly related to #2131 ?

Your minimal, reproducible example

https://codesandbox.io/p/devbox/array-mode-rerender-forked-56d2np?workspaceId=ws_XStUxd2y69i1A18WTfWXJw

Steps to reproduce

In the example sandbox, click the add button twice, then remove the first row and click submit.

Notice in the console logs that all errors are empty, and that the field meta for list[0].operator shows isValidating: true, even though it does not have a validator.

Comment out line 70, repeat the above steps, and notice that the form submits as normal.

Uncomment line 70, change onChangeAsync on line 71 to onChange, repeat the above steps, and notice that the form submits as normal.

Expected behavior

On aform submit, the listened-to field should show isValidating: false, and the form submission should succeed.

How often does this bug happen?

Every time

Screenshots or Videos

No response

Platform

  • OS: macOS
  • Browser: chrome

TanStack Form adapter

react-form

TanStack Form version

1.33.0

TypeScript version

No response

Additional context

No response

Activity

  1. hiSandog commented on Jul 10, 2026

    @hiSandog

    Removing an array row changes every subsequent field path, so pending async-validation bookkeeping keyed by the old indices must be canceled or remapped atomically with field meta. A generation/token per validation run would also prevent a promise started for the removed row from later setting isValidating on the field that shifted into its path. Tests should remove the first and middle rows while validators are unresolved, resolve them in reverse order, and assert both field-level and form-level validating counters return to zero.

  2. added
    v1This issue has been created during v1 development.
    v2: needs investigationThis hasn't been confirmed or denied in v2 yet.
    on Aug 9, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    v1This issue has been created during v1 development.v2: needs investigationThis hasn't been confirmed or denied in v2 yet.

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions