@@ -278,6 +278,8 @@ function (_React$Component) {
278
278
this . fields . filter ( function ( field ) {
279
279
return field . props . name === name ;
280
280
} ) . forEach ( function ( field ) {
281
+ var disableValidator = field . getProp ( "disableValidator" ) ;
282
+ if ( disableValidator ) return ;
281
283
var fieldProps = field . props ;
282
284
283
285
if ( fieldProps . required ) {
@@ -400,26 +402,26 @@ function (_React$Component) {
400
402
formError = _this$state . formError ,
401
403
validatingFields = _this$state . validatingFields ;
402
404
this . fieldLocks [ name ] = this . fieldLocks [ name ] || 1 ;
403
- var lockId = ++ this . fieldLocks [ name ] ; //是否异步探测
405
+ var lockId = ++ this . fieldLocks [ name ] ; //是否异步检测
404
406
405
407
var asyncTimer = setTimeout ( function ( ) {
406
- var _extends4 ;
408
+ var _extends4 , _extends5 ;
407
409
408
410
asyncTimer = null ;
409
411
if ( lockId !== _this2 . fieldLocks [ name ] ) return ;
410
412
411
413
_this2 . setState ( {
412
- validatingFields : _extends ( { } , validatingFields , ( _extends4 = { } , _extends4 [ name ] = true , _extends4 ) )
414
+ validatingFields : _extends ( { } , validatingFields , ( _extends4 = { } , _extends4 [ name ] = true , _extends4 ) ) ,
415
+ formError : _extends ( { } , formError , ( _extends5 = { } , _extends5 [ name ] = null , _extends5 ) )
413
416
} ) ;
414
- } , asyncTestDelay ) ; // let isAsync = true;
417
+ } , asyncTestDelay ) ;
415
418
416
419
this . _validateField ( name , function ( errors , value ) {
417
- var _extends5 , _extends6 ;
420
+ var _extends6 , _extends7 ;
418
421
419
422
if ( asyncTimer ) {
420
423
clearTimeout ( asyncTimer ) ;
421
- } // isAsync = false;
422
-
424
+ }
423
425
424
426
if ( lockId !== _this2 . fieldLocks [ name ] ) {
425
427
callback ( errors , value , true
@@ -429,8 +431,8 @@ function (_React$Component) {
429
431
}
430
432
431
433
_this2 . setState ( {
432
- formError : _extends ( { } , formError , ( _extends5 = { } , _extends5 [ name ] = errors ? errors [ 0 ] . message : null , _extends5 ) ) ,
433
- validatingFields : _extends ( { } , validatingFields , ( _extends6 = { } , _extends6 [ name ] = false , _extends6 ) )
434
+ formError : _extends ( { } , formError , ( _extends6 = { } , _extends6 [ name ] = errors ? errors [ 0 ] . message : null , _extends6 ) ) ,
435
+ validatingFields : _extends ( { } , validatingFields , ( _extends7 = { } , _extends7 [ name ] = false , _extends7 ) )
434
436
} , function ( ) {
435
437
callback ( errors , value ) ;
436
438
} ) ;
@@ -441,10 +443,11 @@ function (_React$Component) {
441
443
var _this3 = this ;
442
444
443
445
callback = typeof callback === "function" ? callback : noop ;
446
+ var formError = { } ;
447
+ var asyncUpdateTimer = null ;
448
+ var hasRunComplete = false ;
444
449
var asyncTestDelay = this . props . asyncTestDelay ;
445
- var _this$state2 = this . state ,
446
- formValue = _this$state2 . formValue ,
447
- formError = _this$state2 . formError ;
450
+ var formValue = this . state . formValue ;
448
451
this . fieldLocks = { } ; //validate优先级高于validateField
449
452
450
453
var lockId = ++ this . formLockId ;
@@ -471,16 +474,20 @@ function (_React$Component) {
471
474
}
472
475
473
476
if ( validCounter <= 0 ) {
477
+ hasRunComplete = true ;
478
+
479
+ if ( asyncUpdateTimer ) {
480
+ clearTimeout ( asyncUpdateTimer ) ;
481
+ asyncUpdateTimer = null ;
482
+ }
483
+
474
484
if ( lockId !== _this3 . formLockId ) {
475
485
callback ( allErrors . length ? allErrors : null , formValue , true
476
486
/* abort state */
477
487
) ;
478
- console . log ( "abort" ) ;
479
488
return ;
480
489
}
481
490
482
- console . log ( "validate" ) ;
483
-
484
491
_this3 . setState ( {
485
492
formError : formError ,
486
493
validatingFields : { }
@@ -491,17 +498,13 @@ function (_React$Component) {
491
498
} ;
492
499
493
500
if ( fields . length ) {
494
- //包含多个异步校验的情况下只执行一次
495
- var hasUpdate = false ; //校验初始化
496
-
501
+ //校验初始化
497
502
fields . forEach ( function ( field ) {
498
503
var name = field . props . name ;
499
504
validCounter ++ ;
500
- validatingFields [ name ] = true ;
501
-
502
- if ( ! ( name in formError ) ) {
503
- formError [ name ] = null ;
504
- }
505
+ validatingFields [ name ] = true ; // if (!(name in formError)) {
506
+ // formError[name] = null;
507
+ // }
505
508
} ) ; //开始进行字段校验
506
509
507
510
fields . forEach ( function ( field ) {
@@ -511,9 +514,6 @@ function (_React$Component) {
511
514
var asyncTimer = setTimeout ( function ( ) {
512
515
isAsyncValidate = true ;
513
516
asyncTimer = null ;
514
- if ( hasUpdate ) return ;
515
- hasUpdate = true ;
516
- updateFormState ( ) ;
517
517
} , asyncTestDelay ) ;
518
518
519
519
_this3 . _validateField ( name , function ( errors ) {
@@ -531,7 +531,14 @@ function (_React$Component) {
531
531
532
532
complete ( errors , name ) ;
533
533
} , triggerType ) ;
534
- } ) ;
534
+ } ) ; //如果校验方法中存在异步校验则先显示同步校验的信息及异步状态
535
+
536
+ asyncUpdateTimer = setTimeout ( function ( ) {
537
+ asyncUpdateTimer = null ; //如果不存在异步校验,hasRunComplete会为true
538
+
539
+ if ( hasRunComplete ) return ;
540
+ updateFormState ( ) ;
541
+ } , asyncTestDelay ) ;
535
542
} else {
536
543
callback ( null , formValue ) ;
537
544
}
@@ -599,6 +606,7 @@ Form.propTypes = process.env.NODE_ENV !== "production" ? {
599
606
getDefaultFieldValue : PropTypes . func ,
600
607
renderControlExtra : PropTypes . func ,
601
608
formValue : PropTypes . object ,
609
+ disableValidator : PropTypes . func ,
602
610
validators : PropTypes . object ,
603
611
validateDelay : PropTypes . number ,
604
612
validateTrigger : PropTypes . oneOfType ( [ PropTypes . oneOf ( [ "blur" , "change" , "none" ] ) , PropTypes . array ] ) ,
@@ -623,10 +631,12 @@ Form.defaultProps = {
623
631
prefixCls : "nex-form" ,
624
632
className : "" ,
625
633
style : { } ,
634
+ //实验性质,有序可能移除
635
+ disableValidator : false ,
626
636
validators : { } ,
627
637
path2obj : true ,
628
638
component : "form" ,
629
- asyncTestDelay : 100 ,
639
+ asyncTestDelay : 16 ,
630
640
validateDelay : 0 ,
631
641
validateTrigger : [ "change" ] ,
632
642
//"blur",
0 commit comments