React で関数とイベント ハンドラーをバインドする必要があるのはなぜですか?

Susan Sarandon
リリース: 2024-10-27 02:35:30
オリジナル
719 人が閲覧しました

 Why and When Should We Bind Functions and Event Handlers in React?

React で関数とイベント ハンドラーをバインドする理由とタイミング?

React では、クラス メソッドのコンテキストはデフォルトではバインドされません。これらのメソッド内でコンポーネントの状態または props にアクセスする場合、それらのコンテキストをバインドする必要があります。

関数バインド オプション

関数をバインドするにはいくつかの方法があります。

1.コンストラクター バインディング:

class SomeClass extends Component {
  constructor() {
    super();
    this.someEventHandler = this.someEventHandler.bind(this);
  }

  someEventHandler(event) {}
}
ログイン後にコピー

2.太い矢印関数:

class SomeClass extends Component {
  someEventHandler = (event) => {
  };
}
ログイン後にコピー

3.インライン Lambda 関数バインディング:

onChange={(event) => this.someEventHandler(event)}
ログイン後にコピー
ログイン後にコピー

4. .bind() メソッド バインディング:

onChange={this.someEventHandler.bind(this)}
ログイン後にコピー
ログイン後にコピー

イベント ハンドラー バインディング オプション

1.インライン Lambda 関数バインディング:

onChange={(event) => this.someEventHandler(event)}
ログイン後にコピー
ログイン後にコピー

2. .bind() メソッド バインディング:

onChange={this.someEventHandler.bind(this)}
ログイン後にコピー
ログイン後にコピー

バインディング メソッドの選択

適切なバインド メソッドは、コンポーネントの構造と必要な機能によって異なります:

事前バインディング (コンストラクター バインディングまたはファット アロー関数):

  • 関数がコンポーネントの状態またはプロパティにアクセスする必要がある場合に使用します。

実行時バインディング (インライン Lambda 関数バインディングまたは .bind() メソッド):

  • 関数がコンポーネントの状態または props にアクセスしていない場合に使用します。
  • 追加のパラメーターを許可します。

追加パラメータの受け渡し:

  • 事前バインディングの場合、コンストラクターの関数引数としてパラメータを渡すか、fat を使用します。追加のパラメーターを持つアロー関数。
  • ランタイム バインディングの場合は、インライン ラムダ関数または追加のパラメーターを持つ .bind() を使用します。

使用例

提供されたコード内スニペット:

render() {
  return <input onChange={this.someEventHandler.bind(this)} />;
}
ログイン後にコピー

これは、.bind() メソッドを使用した実行時バインディングであり、someEventHandler のコンテキストをコンポーネント インスタンスにバインドします。

render() {
  return ;
}
ログイン後にコピー

これは、.bind() メソッドを使用した実行時バインディングです。インライン ラムダ関数。これは、someEventHandler のコンテキストをコンポーネント インスタンスにバインドします。

render() {
  return <input onChange={this.someEventHandler} />;
}
ログイン後にコピー

これは、追加パラメーターのない実行時バインディングです。ただし、正しいコンテキストが維持されるように、コンストラクターで someEventHandler 関数を事前にバインドするか、ファット アロー関数を使用することをお勧めします。

以上がReact で関数とイベント ハンドラーをバインドする必要があるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!