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+ベジェ曲線でスケーラブルな入力検索ボックス効果を実現

では、早速レンダリングを見てみましょう。 コア コードはtransition: cubic-bezi...

CentOS 6.2 に MySQL 5.7.28 をインストールするチュートリアル (mysql ノート)

1. 環境整備1.MySQLインストールパス: /usr/local 2. CentOS 6.2 ...

Linux で独自の Nexus プライベート サーバーを構築する方法

この記事では、Linuxサーバー上でDockerを使用してNexusプライベートサーバーを構築する方...

jQueryはシャトルボックス機能を実現する

この記事では、シャトルボックス機能を実現するためのjQueryの具体的なコードを参考までに紹介します...

html オプション 無効 選択 選択 無効 オプションの例

コードをコピーコードは次のとおりです。 <選択> <オプション値="&q...

ボリュームを使用してホストと Docker コンテナ間でファイルを転送する方法

以前、Docker コンテナとローカル マシン間のファイル転送に関する記事を書きました。しかし、この...

Nginx Linux のインストールと展開の詳細なチュートリアル

1. Nginx の紹介Nginxは負荷分散やリバースプロキシにも使えるWebサーバーです。現在最も...

nginx における proxy_pass のさまざまな使用法の詳細な説明

目次プロキシ転送ルール最初のもの: 2番目のタイプ: 3番目のタイプ: 4番目のタイプ: 5番目:プ...

CSSは5つの一般的な2D変換を実装します

CSS の 2D 変換を使用すると、移動、回転、拡大縮小、変形などの基本的な変換操作を 2 次元空間...

MySQL クエリの重複データ (重複データを削除し、ID が最も小さいデータのみを保持します)

開発の背景:最近、私はバッチ データを MySQL データベースにインポートする機能に取り組んでいま...

フロントエンドページのスライド検証を実装するための JavaScript + HTML

この記事では、フロントエンドページのスライド検証を実装するためのJavaScript + HTMLの...

mysql5.6 の無効な utf8 設定の問題を解決する

mysql5.6 のグリーン バージョンを解凍すると、my-default.ini ファイルが作成さ...

jQuery ステップ進行軸プラグインの実装コード

毎日のjQueryプラグイン - ステップ進捗軸 ステップ進捗軸ツール系のサイトでは入門チュートリア...

Vue 関数のアンチシェイクとスロットリングの正しい使用方法

序文1. デバウンス: 高頻度イベントがトリガーされた後、関数は n 秒以内に 1 回だけ実行されま...

Centos7.x での Nginx のインストール、SSL 設定、一般的なコマンドの詳細な説明

1. インストールyumを使用してインストールする ##yum nginx を自動的にインストールす...