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

推薦する

純粋な CSS3 で水平無限スクロールを実装するためのサンプル コード

この記事の例はすべて小さなプログラムで書かれていますが、実装される機能には影響しません。 wxmlル...

JavaScript の非同期処理で待機時間を節約できますか?

JavaScriptで非同期実行の結果を同期的に取得するには、 for ループ内でawaitを使用...

HTML で div+CSS を使用してシンプルな矢印アイコンを実装するコード

ウェブデザインでは、ウェブページを美しく見せるために矢印を装飾としてよく使用します。現在、多くのウェ...

Vue プロジェクトに ECharts を導入する

目次1. インストール2. はじめに3. 使用4. 必要に応じてEChartsチャートとコンポーネン...

WeChatアプレットに2048ミニゲームを実装する詳細なプロセス

レンダリング サンプルコード今日は、WeChat アプレットを使用して 2048 ゲームを実装します...

Vue.js の計算プロパティ、監視プロパティ、ライフサイクルの詳細な説明

目次序文計算されたプロパティ計算プロパティの紹介入門ケース統計価格事例ゲッターメソッドとセッターメソ...

CSSはインラインブロックのずれの問題を解決します

もうナンセンスじゃない、郵便番号HTML部分 <div class="positio...

MySQL の JSON 挿入の問題

MySQL 5.7.8 以降では、JSON テキストでデータを効率的に取得できるネイティブ JSON...

MySQL レプリケーションの詳細な説明と簡単な例

MySQL レプリケーションの詳細な説明と簡単な例マスタースレーブレプリケーション技術は、MySQL...

Mysql 文字列の傍受と指定された文字列内のデータの取得

序文: 正規表現のインターセプションに似た、MySql フィールドの文字列から特定の文字を抽出すると...

MySQLの日次統計レポートでは、その日にデータがない場合には0が入力されます。

1. 問題の再現:各日の合計数を日ごとにカウントします。データのない日がある場合、グループ化によっ...

この構成ファイルの排他ロックに失敗したという VMware 仮想マシンのプロンプトの解決方法

VMware が異常シャットダウンした後、再起動すると「この構成ファイルを排他的にロックできませんで...

シンプルなドラッグ効果を実現するJavaScript

この記事では、ドラッグ効果を実現するためのJavaScriptの具体的なコードを参考までに紹介します...

Vue は左右のスライド効果のサンプルコードを実装します

序文個人の実際の開発で使用した効果問題を、今後の開発やレビューに役立てるためにまとめています。他の人...

Vue3 の emitting と attr の違いの分析

目次結論は実践分析拡張機能要約する結論は親コンポーネントでカスタム イベントが定義されている場合、子...