@@ -1854,18 +1854,23 @@ export class FieldApi<
18541854 // Check if there are actual async validators to run before setting isValidating
18551855 // This prevents unnecessary re-renders when there are no async validators
18561856 // See: https://github.com/TanStack/form/issues/1130
1857- const hasAsyncValidators =
1858- validates . some ( ( v ) => v . validate ) ||
1859- linkedFieldValidates . some ( ( v ) => v . validate )
1857+ const hasAsyncValidators = validates . some ( ( v ) => v . validate )
1858+ const linkedFieldsWithAsyncValidators = linkedFieldValidates . some ( ( v ) => v . validate ) ? Array . from (
1859+ new Set (
1860+ linkedFieldValidates
1861+ . filter ( ( v ) => v . validate )
1862+ . map ( ( v ) => v . field ) ,
1863+ ) ,
1864+ ) : [ ]
18601865
18611866 if ( hasAsyncValidators ) {
18621867 if ( ! this . state . meta . isValidating ) {
18631868 this . setMeta ( ( prev ) => ( { ...prev , isValidating : true } ) )
18641869 }
1870+ }
18651871
1866- for ( const linkedField of linkedFields ) {
1867- linkedField . setMeta ( ( prev ) => ( { ...prev , isValidating : true } ) )
1868- }
1872+ for ( const linkedField of linkedFieldsWithAsyncValidators ) {
1873+ linkedField . setMeta ( ( prev ) => ( { ...prev , isValidating : true } ) )
18691874 }
18701875
18711876 const validateFieldAsyncFn = (
@@ -1980,10 +1985,10 @@ export class FieldApi<
19801985 // Only reset isValidating if we set it to true earlier
19811986 if ( hasAsyncValidators ) {
19821987 this . setMeta ( ( prev ) => ( { ...prev , isValidating : false } ) )
1988+ }
19831989
1984- for ( const linkedField of linkedFields ) {
1985- linkedField . setMeta ( ( prev ) => ( { ...prev , isValidating : false } ) )
1986- }
1990+ for ( const linkedField of linkedFieldsWithAsyncValidators ) {
1991+ linkedField . setMeta ( ( prev ) => ( { ...prev , isValidating : false } ) )
19871992 }
19881993
19891994 return results . filter ( Boolean )
0 commit comments