2016-02-23 9 views
7

Quando animazione di un elemento in React possiamo utilizzare un frammento come:Cosa fa in realtà transitionEnterTimeout/transitionLeaveTimeout in React?

 <div> 
     <button onClick={this.handleAdd}>Add Item</button> 
     <ReactCSSTransitionGroup transitionName="example" transitionEnterTimeout={500} transitionLeaveTimeout={300}> 
      {items} 
     </ReactCSSTransitionGroup> 
     </div> 

Insieme con le animazioni css complimenti.

Ho letto la documentazione (che si trova qui: https://facebook.github.io/react/docs/animation.html)but io non sono sicuro al 100% quello che i due timeout attributi in realtà non vorrei azzardare un'ipotesi e dire che sono un ripiego se l'animazione non completa

??

Qualora i valori corrispondono ai css nei valori/durata, o dovrebbero essere superiori ai valori di animazione?

.example-enter { 
    opacity: 0.01; 
} 

.example-enter.example-enter-active { 
    opacity: 1; 
    transition: opacity 500ms ease-in; 
} 

.example-leave { 
    opacity: 1; 
} 

.example-leave.example-leave-active { 
    opacity: 0.01; 
    transition: opacity 300ms ease-in; 
} 

risposta

8

indicano per quanto tempo le transizioni CSS associati prendono per completare. Si dovrebbe impostare questi valori allo stesso valori che utilizzi nelle tue classi CSS per l'attributo di transizione

ReactCSSTransitionGroup quindi utilizza questo per determinare quando deve considerare gli elementi aggiunti e rimossi in modo che possa intraprendere l'azione corretta. Faceva ciò ascoltando i callback, tuttavia, ciò risultava inaffidabile in quanto vi erano molti casi in cui i callback non venivano mai chiamati. Ciò farebbe sì che gli elementi non vengano mai rimossi dopo la transizione, ad esempio.

+4

Proprio come un seguito, attualmente, gli oggetti di scena '* Timeout' non fanno nulla se la classe applicata ha una transizione o un'animazione ad essa associata. È possibile impostare il valore su qualsiasi cosa si desideri e 'ReactCSSTransitionGroup' lo ignora a favore dell'ascolto degli eventi' animationEnd' o 'transitionEnd' che il browser emette. L'unica volta che quei valori fanno qualcosa è quando la classe è priva di transizioni o animazioni. –

+1

@ noob-in-need Non penso che sia completamente vero - (almeno non nella versione attuale). Se imposto timeout molto alti, ma tempi di animazione bassi, l'animazione si concluderà, ma l'elemento non verrà rimosso fino a quando la transizioneEnd time non sarà disponibile – Chris