2016-03-20 16 views
4

SyntheticEvent bir havuzda toplanır. Bu, SyntheticEvent nesnesinin yeniden kullanılacağı ve olay geri çağrısı çağrıldıktan sonra tüm özelliklerin geçersiz kılınacağı anlamına gelir. Bu performans nedenleri içindir. Bu nedenle, etkinliğe eşzamansız bir şekilde erişemezsiniz. Tepkide etkinlik havuzu nedir?

bakınız: Event System in React

+0

Yanıtın bu tırnak içinde olduğu anlaşılıyor ... – nnnnnn

+0

ama anlayamıyorum. Benim gibi bir yeni başlayan için ifadeyi anlamak daha kolay olamaz mı? –

+0

Bu, bir SyntheticEvent nesnesi gerektiğinde, sistemin yeni bir tane oluşturmak yerine eski bir dosyayı yeniden kullanacağı anlamına gelir. Eşzamansız işlemler hakkında ne söylediğini anlamıyorsanız, eşzamansız işlevsellik hakkında bazı genel dersleri okumanız ve bu bilgiyi bu konuya tekrar uygulamalısınız. – nnnnnn

cevap

4

Bu geri aktifken olayın özelliklerini yalnızca mevcut olduğu anlamına gelir. Karışımı eşzamanlı olarak ekleme veya olayı gelecekte kullanmak üzere saklama başarısız olur.

Bir olay işleyicide console.log(event) öğesini denerseniz, bu kolayca gözlenir. Nesneyi incelediğinizde, olay nesnesindeki özelliklerin çoğu null olacaktır. Değeri kaydettikten hemen sonra komut dosyasının yürütülmesini debugger; ile durdurursanız, değerleri inceleyebilirsiniz.

class MyComponent extends React.Component { 
    handleClick (e){ 
    console.log('The event currentTarget is', e.currentTarget); // DOM element 
    setTimeout(() => { 
    console.log('event.currentTarget was', e.currentTarget); // null 
    }, 1000) 
    } 
    render() { 
    return <button onClick={this.handleClick}>Fire event!</button> 
    } 
} 

Bu

Tıkladığınız anda bir DOM öğesi log ve bir saniye sonra null olacaktır. Benden başka nedenlerle, bir sonraki olaya kadar event.target hala saklanır ve geçersiz sayılmaz.