@@ -61,7 +61,7 @@ class QueueAnim extends React.Component {
6161 const nextState = {
6262 prevProps : props ,
6363 } ;
64- if ( prevProps && ! $self . isInsideRender
64+ if ( prevProps && props !== prevProps
6565 ) {
6666 const nextChildren = toArrayChildren ( props . children ) . filter ( c => c ) ;
6767 let currentChildren = $self . originalChildren . filter ( item => item ) ;
@@ -73,6 +73,7 @@ class QueueAnim extends React.Component {
7373 const leaveChild = children . filter (
7474 item => item && $self . keysToLeave . indexOf ( item . key ) >= 0 ,
7575 ) ;
76+
7677 $self . leaveUnfinishedChild = leaveChild . map ( item => item . key ) ;
7778 /**
7879 * 获取 leaveChild 在 state.children 里的序列,再将 leaveChild 和 currentChildren 的重新排序。
@@ -98,7 +99,6 @@ class QueueAnim extends React.Component {
9899 currentChildren = currentChild . filter ( c => c ) ;
99100 }
100101 const newChildren = mergeChildren ( currentChildren , nextChildren ) ;
101-
102102 const childrenShow = ! newChildren . length ? { } : prevChildShow ;
103103 $self . keysToEnterPaused = { } ;
104104 const emptyBool = ! nextChildren . length && ! currentChildren . length && children . length ;
@@ -152,7 +152,6 @@ class QueueAnim extends React.Component {
152152 delete $self . placeholderTimeoutIds [ key ] ;
153153 }
154154 } ) ;
155- $self . keysToEnterToCallback = [ ...$self . keysToEnter ] ;
156155 }
157156 return nextState ;
158157 }
@@ -230,7 +229,6 @@ class QueueAnim extends React.Component {
230229 this . tweenToEnter [ child . key ] = true ;
231230 }
232231 } ) ;
233- this . keysToEnterToCallback = [ ...this . keysToEnter ] ;
234232 this . originalChildren = toArrayChildren ( getChildrenFromProps ( props ) ) ;
235233 this . state = {
236234 children,
@@ -251,7 +249,6 @@ class QueueAnim extends React.Component {
251249 const keysToLeave = [ ...this . keysToLeave ] ;
252250 keysToEnter . forEach ( this . performEnter ) ;
253251 keysToLeave . forEach ( this . performLeave ) ;
254- this . isInsideRender = false ;
255252 }
256253
257254 componentWillUnmount ( ) {
@@ -381,7 +378,7 @@ class QueueAnim extends React.Component {
381378 } ;
382379
383380 getChildrenToRender = child => {
384- const { forcedReplay, leaveReverse, delay, interval } = this . props ;
381+ const { forcedReplay, leaveReverse, delay, interval, children } = this . props ;
385382 if ( ! child || ! child . key ) {
386383 return child ;
387384 }
@@ -417,7 +414,7 @@ class QueueAnim extends React.Component {
417414 animation = this . getTweenEnterOrLeaveData ( key , i , $delay , 'leave' ) ;
418415 } else {
419416 // 处理进场;
420- i = this . keysToEnterToCallback . indexOf ( key ) ;
417+ i = toArrayChildren ( children ) . findIndex ( c => c && c . key === key ) ;
421418 ref = ( c ) => {
422419 this . childRefs [ key ] = c && c . currentRef ? c . currentRef : c ;
423420 }
@@ -468,7 +465,6 @@ class QueueAnim extends React.Component {
468465 delete this . keysToEnterPaused [ key ] ;
469466 ticker . clear ( this . placeholderTimeoutIds [ key ] ) ;
470467 delete this . placeholderTimeoutIds [ key ] ;
471- this . isInsideRender = true ;
472468 this . setState ( { childrenShow } ) ;
473469 } ;
474470
@@ -510,7 +506,7 @@ class QueueAnim extends React.Component {
510506
511507 leaveComplete = ( key , e ) => {
512508 // 切换时同时触发 onComplete。 手动跳出。。。
513- if ( this . keysToEnterToCallback . indexOf ( key ) >= 0 ) {
509+ if ( toArrayChildren ( this . props . children ) . findIndex ( c => c && c . key === key ) >= 0 ) {
514510 return ;
515511 }
516512 const childrenShow = this . state . childrenShow ;
@@ -523,7 +519,6 @@ class QueueAnim extends React.Component {
523519 const needLeave = this . keysToLeave . some ( c => childrenShow [ c ] ) ;
524520 if ( ! needLeave ) {
525521 const currentChildren = toArrayChildren ( getChildrenFromProps ( this . props ) ) ;
526- this . isInsideRender = true ;
527522 this . setState ( {
528523 children : currentChildren ,
529524 childrenShow,
0 commit comments