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 最適化ガイド

推薦する

Windows 版 MySQL のインストール、起動、基本設定に関する詳細なグラフィック チュートリアル

ダウンロード:ステップ 1: ウェブサイトを開きます (ダウンロードするには公式ウェブサイトにアクセ...

MySQL 8.0.11 の新機能の紹介

MySQL 8.0 for Windows v8.0.11 公式無料バージョン 64 ビット1. デ...

Vueルーティングはページステータスを復元する操作メソッドを返します

ルートパラメータ、ルートナビゲーションガード: ページが戻ったときに検索結果を保持する需要シナリオ:...

役に立つメタ設定方法(必読)

<meta name="viewport" content="...

CSSはクーポンスタイルを実装するために放射状グラデーションを使用します

この記事では、CSS で放射状グラデーションを使用して、次の図に示すクーポン スタイルの効果を実現す...

Linux sftp コマンドの使用法

SFTPの概念sftp は、安全なファイル転送プロトコルである Secure File Transf...

MySQL 最適化のヒント: 重複削除の実装方法の分析 [数百万のデータ]

この記事では、MySQL 最適化のヒントで重複したエントリを削除する方法を例を使って説明します。ご参...

Linuxシステムでノードプロセスを実行しているが、プロセスを強制終了できない問題を解決します

まず、Linux システムで実行されているノード プロセスはプロセスを強制終了できないことを紹介しま...

React + Threejs + Swiper パノラマ効果を実現するための完全なコード

パノラマビュー効果を見てみましょう: 住所を表示スクリーンショット: 体験してみると、周囲の環境がぐ...

dockerコンテナにviコマンドをインストールする簡単な操作

docker コンテナを使用する場合、vim がインストールされていないことがあり、vim コマンド...

Linux ソースコードからのソケット (TCP) クライアント側での接続の例の詳細な説明

序文著者は、アプリケーションからフレームワーク、オペレーティング システムに至るまで、あらゆるコード...

Nginx プロキシ使用時にヘッダーに「_」が含まれることで情報が失われる問題の解決方法

序文ゲートウェイプロジェクトを開発する場合、署名 sign_key 情報はリクエスト時にリクエスト ...

HTMLの基本概念の詳細な説明

HTMLとは何ですか? HTML は Web ページを記述するために使用される言語です。 •HTML...

MySQL データ型の完全分析

データ型: 列に格納できるデータとそのデータが実際にどのように格納されるかを定義する基本ルール。デー...

Linuxオペレーティングシステムは、タスクマネージャーの視覚化機能を実装するためにPythonを使用しています。

1. Pythonのインストール1. フォルダーを作成します。 mkdir python フォルダ...