2016-03-20 3 views
4

SyntheticEventがプールされます。これは、SyntheticEventオブジェクトが再利用され、イベントコールバックが呼び出された後にすべてのプロパティが無効になることを意味します。これはパフォーマンス上の理由によるものです。そのため、非同期の方法でイベントにアクセスすることはできません。反応中のイベントプーリングとは何ですか?

参照:Event System in React

+0

答えはその引用の中にあるようです... – nnnnnn

+0

しかしわかりません。私のような初心者のためにステートメントを理解しやすくすることはできないのですか? –

+0

これは、SyntheticEventオブジェクトが必要な場合は、新しいものを作成するのではなく古いものを再利用することを意味します。非同期操作に関することを理解できない場合は、非同期機能に関する一般的なチュートリアルを読み、その知識をこの特定のトピックに適用する必要があります。 – nnnnnn

答えて

4

をそれがコールバックがアクティブである間、イベントの特性のみ存在することを意味します。ミックスにasyncを追加するか、将来の使用のためにイベントを保存することは失敗します。

これは、イベントハンドラ内でconsole.log(event)を試してみると簡単に確認できます。オブジェクトを検査するときまでに、イベントオブジェクトのほとんどのプロパティはnullになります。値を記録した直後にdebugger;でスクリプトの実行を停止すると、値を検査できます。

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> 
    } 
} 

これは、ボタンをクリックすると、DOM要素を記録し、null秒後になります。私以外の理由で、event.targetは、次のイベントが発生するまでまだ保存されており、無効化されていません。

関連する問題