反応クリック イベントを記述する方法はいくつかありますか?
記述方法: 1. "onClick={this.handleClick}" を使用する; 2. "onClick={this.handleClick.bind(this)}" を使用する; 3. "{(params)=>" を使用する; this.handleClick(params)}"。
このチュートリアルの動作環境: Windows 10 システム、react17.0.1 バージョン、Dell G3 コンピューター。
反応クリック イベントを記述する方法はいくつかありますか?
本題に移りましょう。まず、ボタンのイベントを記述する正しい方法を直接示しましょう:
ボタンに追加 onclick イベントを記述する正しい方法
- パラメータは渡されません
// handleClick は
onClick = { this.handleClick }
// handleClick用箭头函数定义时,为onClick添加事件应该这么写:<Button onClick = { this.handleClick }></Button></p> <p>handleClick は次のように定義されます: </p> <pre class="brush:php;toolbar:false">handleClick = () => { // do something here};
または
// handleClick が使用されます(通常の関数) 定義
onClick = { this.handleClick .bind(this) }
// handleClick用普通函数定义时,为onClick添加事件应该这么写:<Button onClick = { this.handleClick.bind(this) }></Button>
handleClick は次のように定義されます:
handleClick () { // do something here }
- パラメータを渡す
// handleClick は < アロー関数>/(通常の関数) を定義できます
onClick = { (params) => this.handleClick(params) }
// handleClick可以是箭头函数,也可以是普通函数<Button onClick = { (params) => this.handleClick(params) }></Button>
なぜこのように書くことが正しいのかを分析しましょう :
この問題の分析のポイント
この問題を理解するには、次の文を理解してください:
アロー関数は、独自の this を持たないため、定義時のコンテキストの this
になります。通常の関数には独自の this があるため、this は次のようになります。実行時のコンテキストの
まずは見てみましょう 最初の書き方:
1. onClick = { this.handleClick } アロー関数
以下のコードは次のとおりです: ボタンの onclick イベントを追加します (完全な JSX)
// examplePage.jsximport React from 'react';import { Button } from 'antd';class examplePage extends React.Component { // 2. 定义handleClick事件 handleClick = () => { console.log(this); //3. this指向examplePage } render() { return ( <p> // 1. 为onClick绑定 handleClick事件处理函数 <Button onClick = { this.handleClick }>click me</Button> </p> ) }}export default examplePage;
ボタンをクリックしてこれを出力します:
this: examplePage {props: Object, context: {}, refs: {}, updater: Object , state: {}, …}
分析:
- When Button がクリックされると、handleClick イベント処理関数が呼び出されます。
- handleClick はアロー関数であるため、これが定義されたときのコンテキストの this となり、
- handleClick はクラスで定義されますexamplePage,
- これは examplePage
- を指しているので、アロー関数が通常の関数に変更されるかどうかを確認してみましょう。 状況:
2. onClick = { this.handleClick.bind(this) } 通常の関数
まず、bind(this) が使用されていない場合に、console.log(this) が出力する内容を見てみましょう:
// examplePage.jsximport React from 'react';import { Button } from 'antd';class examplePage extends React.Component { // 2. !将箭头函数改为普通函数 handleClick () { console.log(this); // 3. this 为 undefined } render() { return ( <p> // 1. 为onClick绑定 handleClick事件处理函数 <Button onClick = { this.handleClick }>click me</Button> </p> ) }}export default examplePage;
ボタンをクリックして、これを出力します:
これ: 未定義
分析:
- ボタンをクリックすると、ハンドルClickイベント処理関数が呼び出されます
- handleClickは通常の関数なので、これが実行コンテキストになります
- handleClickはボタン時に実行されるページ上でクリックされます、コンテキストはHTMLページです
- したがって、これは未定義であり、examplePage を指しません
注: 厳密なバージョンでは、デフォルトではこれはありません。その後、ウィンドウがありますが、未定義です
モジュール コードは常に厳密モード コードです。
ClassDeclaration または ClassExpression のすべての部分は厳密モード コードです。
したがって、このポインターを変更するにはバインドを使用する必要があります。つまり:
render() { return ( <p> // 用bind改变this指向 <Button onClick = { this.handleClick.bind(this) }>click me</Button> </p> )}
分析:
- ボタンがクリックされると、handleClick イベント処理関数が呼び出されます。
- bind() 関数を通じて、レンダリング関数の this(クラス examplePage を指します) ) を変数として handleClick に渡します
- 本来は handleClick は通常の関数で、これは実行コンテキストの this (つまり未定義) ですが、bind(this) が渡されるため -- を指します。 examplePage.this
- つまり、現時点では、this は examplePage を指しており、これが未定義の問題を解決します
上の 2 つを理解すると、最後の 1 つは理解しやすいです。
3. onClick = { (params) => this.handleClick(params) } 通常の関数/アロー関数が使用可能
render() { return ( <p> // 通过箭头函数传参 <Button onClick = { (params) => this.handleClick(params) }></Button> </p> )}
分析:
- アロー関数を介してパラメータを渡すことは、アロー関数を onClick にバインドすることと同じです。
- #ボタンがクリックされると、アロー関数 (params) => this.handleClick(params) が呼び出されます。 , したがって、これはコンテキストで定義されています。この、
- handleClick はクラス examplePage,
- で定義されているため、これは examplePage を指します
- この考え方によれば、onClick を書くだけですアロー関数を使用して応答イベントを呼び出し、これがコンポーネント クラスを指している場合、問題はありません。
次に、パラメーターが渡されない場合は、次のように記述します。
<Button onClick = { () => this.handleClick() }></Button>
しかしこれは実現不可能です はい、react は () => this.handleClick() を直接解析するため、handleClick が呼び出されます。これは onClick = "handleClick を呼び出した結果" と同等です
つまり、パラメータが渡されない場合にのみ、このように書くことができます。 :
<Button onClick = { this.handleClick }></Button>
概要
最初の 3 つの質問には答えることができます
- 什么情况下需要bind(this)?
答: onClick传入的事件处理函数是普通函数的时候,需要bind(this)来改变指向 - 为什么要用bind(this)?
答:如果不用bind(this), this会指向undefined - 可以不用bind(this)吗?
答:用箭头函数 (用箭头函数定义事件处理函数)
//定义handleClick事件 handleClick = () => { // do something here }; //为onClick绑定handleClick事件处理函数 <Button onClick = {this.handleClick}></Button> // 不传参 <Button onClick = {(param) => this.handleClick(param) }></Button> // 传参
推荐学习:《react视频教程》
以上が反応クリック イベントを記述する方法はいくつかありますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック









React と WebSocket を使用してリアルタイム チャット アプリケーションを構築する方法 はじめに: インターネットの急速な発展に伴い、リアルタイム コミュニケーションがますます注目を集めています。ライブチャット アプリは、現代の社会生活や仕事生活に不可欠な部分になっています。この記事では、React と WebSocket を使用して簡単なリアルタイム チャット アプリケーションを構築する方法と、具体的なコード例を紹介します。 1. 技術的な準備 リアルタイム チャット アプリケーションの構築を開始する前に、次のテクノロジとツールを準備する必要があります。 React: 構築用の 1 つ

React フロントエンドとバックエンドの分離ガイド: フロントエンドとバックエンドの分離と独立したデプロイメントを実現する方法、特定のコード例が必要です 今日の Web 開発環境では、フロントエンドとバックエンドの分離がトレンドになっています。フロントエンド コードとバックエンド コードを分離することで、開発作業がより柔軟かつ効率的になり、チームのコラボレーションが促進されます。この記事では、React を使用してフロントエンドとバックエンドの分離を実現し、それによって分離と独立したデプロイの目標を達成する方法を紹介します。まず、フロントエンドとバックエンドの分離とは何かを理解する必要があります。従来の Web 開発モデルでは、フロントエンドとバックエンドが結合されています。

React と Flask を使用してシンプルで使いやすい Web アプリケーションを構築する方法 はじめに: インターネットの発展に伴い、Web アプリケーションのニーズはますます多様化および複雑化しています。使いやすさとパフォーマンスに対するユーザーの要件を満たすために、最新のテクノロジー スタックを使用してネットワーク アプリケーションを構築することがますます重要になっています。 React と Flask は、フロントエンドおよびバックエンド開発用の 2 つの非常に人気のあるフレームワークであり、うまく連携してシンプルで使いやすい Web アプリケーションを構築します。この記事では、React と Flask を活用する方法について詳しく説明します。

React と RabbitMQ を使用して信頼性の高いメッセージング アプリケーションを構築する方法 はじめに: 最新のアプリケーションは、リアルタイム更新やデータ同期などの機能を実現するために、信頼性の高いメッセージングをサポートする必要があります。 React はユーザー インターフェイスを構築するための人気のある JavaScript ライブラリであり、RabbitMQ は信頼性の高いメッセージング ミドルウェアです。この記事では、React と RabbitMQ を組み合わせて信頼性の高いメッセージング アプリケーションを構築する方法を紹介し、具体的なコード例を示します。 RabbitMQ の概要:

React コード デバッグ ガイド: フロントエンドのバグをすばやく見つけて解決する方法 はじめに: React アプリケーションを開発するとき、アプリケーションをクラッシュさせたり、不正な動作を引き起こしたりする可能性のあるさまざまなバグに遭遇することがよくあります。したがって、デバッグ スキルを習得することは、すべての React 開発者にとって不可欠な能力です。この記事では、フロントエンドのバグを見つけて解決するための実践的なテクニックをいくつか紹介し、読者が React アプリケーションのバグをすばやく見つけて解決できるようにする具体的なコード例を示します。 1. デバッグツールの選択: In Re

ReactRouter ユーザーガイド: フロントエンドルーティング制御の実装方法 シングルページアプリケーションの人気に伴い、フロントエンドルーティングは無視できない重要な部分になりました。 React エコシステムで最も人気のあるルーティング ライブラリとして、ReactRouter は豊富な機能と使いやすい API を提供し、フロントエンド ルーティングの実装を非常にシンプルかつ柔軟にします。この記事では、ReactRouter の使用方法と具体的なコード例を紹介します。 ReactRouter を最初にインストールするには、次のものが必要です

React と Google BigQuery を使用して高速データ分析アプリケーションを構築する方法 はじめに: 今日の情報爆発の時代において、データ分析はさまざまな業界で不可欠なリンクとなっています。中でも、高速かつ効率的なデータ分析アプリケーションを構築することは、多くの企業や個人が追求する目標となっています。この記事では、React と Google BigQuery を使用して高速データ分析アプリケーションを構築する方法を紹介し、詳細なコード例を示します。 1. 概要 React はビルドするためのツールです

React と Docker を使用してフロントエンド アプリケーションをパッケージ化およびデプロイする方法 フロントエンド アプリケーションのパッケージ化とデプロイは、プロジェクト開発の非常に重要な部分です。最新のフロントエンド フレームワークの急速な発展により、React は多くのフロントエンド開発者にとって最初の選択肢となっています。コンテナ化ソリューションとして、Docker はアプリケーションのデプロイメントプロセスを大幅に簡素化できます。この記事では、React と Docker を使用してフロントエンド アプリケーションをパッケージ化してデプロイする方法を紹介し、具体的なコード例を示します。 1. 準備 始める前に、インストールする必要があります
