Reactイベントバインディングの詳細な説明

Reactイベントバインディングの詳細な説明

1. 何ですか

reactアプリケーションでは、イベント名はキャメルケース形式で記述されます。たとえば、 onclick onClickと書き直す必要があります。

最も単純なイベント バインディングは次のとおりです。

クラスShowAlertはReact.Componentを拡張します。
  アラートを表示(){
    console.log("こんにちは");
  }

  与える() {
    <button onClick={this.showAlert}>表示</button> を返します。
  }
}

上記のように、イベントバインディングメソッドは{}でラップする必要があります。

上記のコードは問題ないように見えますが、処理関数の出力コードをconsole.log(this)に置き換えると、ボタンがクリックされたときにコンソール出力がundefined

2. バインド方法

thisの正しく出力する問題を解決するために、一般的なバインディング方法は次のとおりです。

  • レンダリングメソッドでbindを使用する
  • レンダリングメソッドで矢印関数を使用する
  • コンストラクタでバインドする
  • 定義フェーズで矢印関数バインディングを使用する

レンダリングメソッドでbindを使用する

クラス コンポーネントを使用し、コンポーネント/要素にonClick属性を指定すると、そのthisが現在のコンポーネントに自動的にバインドされるようになりました。この問題の解決策は、イベント関数の後に.bind(this)を使用して、 this現在のコンポーネントにバインドすることです。

クラスAppはReact.Componentを拡張します。
  ハンドルクリック() {
    console.log('これ > ', これ);
  }
  与える() {
    戻る (
      <div onClick={this.handleClick.bind(this)}>テスト</div>
    )
  }
}

このメソッドは、 renderたびにコンポーネントを再bindため、パフォーマンスに影響します。

レンダリングメソッドで矢印関数を使用する

ES6コンテキストは、 thisのポインターを現在のコンポーネントにバインドするために使用されます。また、 renderが実行されるたびに新しいメソッドが生成され、パフォーマンスに影響します。

クラスAppはReact.Componentを拡張します。
  ハンドルクリック() {
    console.log('これ > ', これ);
  }
  与える() {
    戻る (
      <div onClick={e => this.handleClick(e)}>テスト</div>
    )
  }
}

コンストラクタでバインドする

render操作で繰り返しバインドされないように、 constructorで現在のコンポーネントを事前にbind

クラスAppはReact.Componentを拡張します。
  コンストラクタ(props) {
    スーパー(小道具);
    this.handleClick = this.handleClick.bind(this);
  }
  ハンドルクリック() {
    console.log('これ > ', これ);
  }
  与える() {
    戻る (
      <div onClick={this.handleClick}>テスト</div>
    )
  }
}

定義フェーズで矢印関数バインディングを使用する

上記の方法 3 と同様に、 render操作での繰り返しバインディングを回避でき、実装も次のように非常に簡単です。

クラスAppはReact.Componentを拡張します。
  コンストラクタ(props) {
    スーパー(小道具);
  }
  ハンドルクリック = () => {
    console.log('これ > ', これ);
  }
  与える() {
    戻る (
      <div onClick={this.handleClick}>テスト</div>
    )
  }
}

3. 違い

上記の 4 つの方法の違いは主に次のとおりです。

  • 書き方:方法1と方法2は書きやすいが、方法3は複雑すぎる
  • パフォーマンス: 方法 1 と方法 2 では、コンポーネントがレンダリングされるたびに新しいメソッド インスタンスが生成されるため、パフォーマンスが低下します。この関数がプロパティ値として子コンポーネントに渡されると、追加のレンダリングが発生します。方法3と方法4は1つのメソッドインスタンスのみを生成します。

上記を踏まえると、方法4が最適なイベントバインディング方法である。

React イベントバインディングに関するこの記事はこれで終わりです。React イベントバインディングに関するより関連性の高いコンテンツについては、123WORDPRESS.COM で過去の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • Reactでのイベントバインディングの実装は3つの方法を指しています
  • Reactでこれをイベントにバインドする4つの方法の詳細な説明
  • React学習におけるイベントバインディングのいくつかの手法の比較
  • React イベントバインディングの詳細

<<:  Ubuntu 18.04 (コミュニティ エディション) に Docker CE をインストールする方法

>>:  MySQL InnoDB MRR 最適化ガイド

推薦する

HTML構造化実装方法

DIV+css構造 CSSレイアウトを学んでいますか?まだ純粋な CSS レイアウトを完全に習得でき...

Truncate Table の使用法の説明

テーブルを切り捨てる個々の行の削除をログに記録せずに、テーブル内のすべての行を削除します。文法 テー...

MySQL 8.0 のタイムゾーン問題を解決する手順

ソフトウェアバージョンウィンドウズ: ウィンドウズ10 MySQL: mysql-8.0.16-wi...

Nginx で 403 forbidden を解決するための完全な手順

ウェブページに403 Forbiddenと表示されるNginx (yum インストール ログは通常 ...

IE6はmin-widthを実装している

まず第一に、この効果は古い話題であるはずだということはわかっています。今日ファイルを整理していたら、...

vue の v-for ディレクティブはリストのレンダリングを完了します

目次1. リストの走査2. Vueにおけるキーの役割3. リストフィルタリングこの記事では、Vue ...

Linux ディスクデバイスと LVM 管理コマンドの詳細な例

序文Linux オペレーティング システムでは、デバイス ファイルは特別なタイプのファイルです。これ...

MySQL ロック制御同時実行方法

目次序文1. 楽観的ロックバージョンフィールドを追加する2. 悲観的ロック読み取りロック完全なテーブ...

MySQL INT型の完全な分析

序文: Integer は MySQL で最もよく使用されるフィールド型の 1 つで、通常は整数を格...

JavaScript でロジック判定コードを最適化する方法

序文日常生活で使用する論理的判断文には、if...else...、switch...case...、...

Ubuntu 18.04 LTSでIPアドレスを設定するための完全な手順

序文Ubuntu 18.04 LTS で IP アドレスを設定する方法は、これまで使用されていた設定...

Web Storage APIの使用に関する簡単な説明

目次1. ブラウザのローカルストレージ技術1.1、セッションストレージ1.2、ローカルストレージ2....

CSS でコンテンツが長すぎる問題を解決する方法の詳細な説明

CSS を記述するときに、デザインに存在する重要なケースを忘れてしまうことがあります。たとえば、コン...

js配列の基本的な使い方のまとめ

序文配列は特別な種類のオブジェクトです。 js には実際の配列はなく、オブジェクトを使用して配列をシ...