2017-11-20 7 views
0

イベント:オプションのメニューで、別のコンポーネントに ルータアクセスを通じてクリックして、画面の同じイベントの繰り返し実行を避けるにはどうすればよいですか?私は、次の操作を行いうまくまで私の部品の仕事の

  1. 変更。
  2. 私は元の コンポーネントに戻ります。

これを行うと、コンポーネントのイベントが重複しています。 たとえば、handleAddTaskイベントは、他のメニューオプションでクリックが行われた回数だけ実行されます。 他のモジュールへのルーティングを起動しないと、イベントは正常に機能し、重複しません。

答えて

0

コンポーネントがアンマウントされても、componentDidMountに添付されているイベントリスナーは消えないので、コンポーネントを再マウントするたびに新しいリスナーセットが取得されます。

1

このクリックが毎回リフレッシュ

代わりの結合をレンダリングバインドされますonClick={this.clickHandler.bind(this)}constructor

constructor() { 
    this.clickHandler = this.clickHandler.bind(this); 
} 

に結合

<div onClick={this.clickHandler.bind(this)} ... > 

使用のようなclickイベントを使用しないでください。レンダリング機能のイベントがそれをバインドしますcontructorにあります。

+0

ありがとうございました。残念なことに、私は、少なくとも私が使用するコンポーネントの "反応"の部分ではなく、その種のイベントを使用していません。このコンポーネントでは、コンストラクタでバインドを使用します。おそらくコンポーネントの内部ライブラリにそのようなことがあります。スタックされたイベントを排除する方法があれば... – Reactib

+0

@Cognitiva、あなたのコードをチェックする方法はありますか、問題の原因となっているコードブロックを共有してください。 –

+0

多くのおかげでVivek、私は問題:componentDidMountに添付されているイベントリスナーは、コンポーネントがアンマウントされても消えないので、コンポーネントを再マウントするたびに新しいリスナーセットが取得されます。 – Reactib

関連する問題