Inconsistent behavior between validators: onSubmit validates error fields on change, whereas onBlur always validates on blur

Offen
#2,007 2 Kommentare 2 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen

Maintainer antworten meist innerhalb von 1 Tag

Dieses Issue hat noch niemand übernommen.

Bewertung

Schwierigkeit
4/5
Geschätzter Aufwand
3-5 Tage
Anfängerfreundlichkeit
35/100
Issue-Typ
Bug
Klarheit
Größtenteils klar
Aktivitätsstatus
Veraltet
Tech-Stack
react, typescript
Bereich
frontend

Rechercherichtung

Beginne mit der minimalen Reproduktion im verknüpften StackBlitz unter src/index.tsx und vergleiche die in den Schritten beschriebenen Validierungsabläufe von onBlur und onSubmit. Verfolge die relevanten Validator-Einstiegspunkte im Formularpaket und überprüfe anschließend, dass das gewählte Verhalten fehlerhafte Felder konsistent erneut validiert und die Reproduktion keinen zweiten Blur mehr erfordert.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Beschreibung

v1 v2: needs investigation
Describe the bug

After onBlur validation reveals an error, the onBlur validator will not run again until the field is blurred again. Whereas after onSubmit validation reveals an error, the onSubmit validator will re-run on change. The behavior of all the validators should be consistent. (Although it'd be more convenient for me personally if onBlur re-ran error fields on change but onSubmit re-ran them only on submit 😭)

Imo the correct behavior is to make them both revalidate error fields on change. This falls in line with the research-validated "reward early, punish late" pattern.

Your minimal, reproducible example

https://stackblitz.com/edit/github-vhbc3ekb?file=src%2Findex.tsx

Steps to reproduce
  1. Blur the first name field without entering any text. You will see an error message for the first name field.
  2. Enter text into the first name field. You will still see the error message.
  3. Blur the first name field. The error message will disappear
  4. Click the submit button. You will see an error message for the last name field.
  5. Enter text into the last name field. The error message will disappear
Expected behavior

I expected entering the text into the first name field to remove the error message without needing to be blurred first. The error message should disappear on change as soon as the field is valid the same way it works for on submit

How often does this bug happen?

Every time

Screenshots or Videos

No response

Platform
  • OS: Mac
  • Browser: Chrome v144.0.7559.97
TanStack Form adapter

react-form

TanStack Form version

v1.28.0

TypeScript version

v5.9.3

Additional context

Edit: I thought about it more and the existing onSubmit behavior can be recovered with onDynamic. That's a point in favor of changing onSubmit to work like onBlur instead of the other way around

Vorherrschende Sprache
TypeScript
Sterne
6.8k
Forks
705
Ø Merge
1 T. 12 Std.
Gemergte PRs (30 T.)
14

Entwicklungsumgebung

Erste Schritte

  1. Lesen Sie das ganze Issue und danach den Beitragsleitfaden des Projekts.
  2. Schreiben Sie ins Issue, dass Sie es übernehmen — das erspart doppelte Arbeit.
  3. Forken Sie das Repository und arbeiten Sie in einem Branch.
  4. Öffnen Sie einen Pull Request, der die Issue-Nummer nennt.

Mehr aus TanStack/form

Alle Issues in TanStack/form

Ähnliche Issues

Weitere Issues zu TypeScript

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.