React 合成イベントは、React がネイティブ DOM イベントのすべての機能をシミュレートできるイベント オブジェクト、つまりブラウザ ネイティブ イベントのクロスブラウザ ラッパーです。W3C 仕様に従って合成イベントを定義し、互換性があります。すべてのブラウザに対応しており、ブラウザのネイティブ イベントと同じインターフェイスを備えています。 React では、すべてのイベントは合成イベントであり、ネイティブ DOM イベントではありませんが、DOM イベントは「e.nativeEvent」プロパティを通じて取得できます。
#このチュートリアルの動作環境: Windows7 システム、react18 バージョン、Dell G3 コンピューター。
#1. 合成イベントとは
React はブラウザーです。ベース イベント メカニズム自体は、イベント登録、イベント合成、イベント バブリング、イベント ディスパッチなどを含む一連のイベント メカニズムを実装します。
React では、この一連のイベント メカニズムは合成イベントと呼ばれます
SyntheticEvent
React SyntheticEvent は、ネイティブ DOM イベントのすべての機能、つまりブラウザーのネイティブ イベント デバイス ラッパーのクロスブラウジングを React がシミュレートするイベント オブジェクトです。 W3C 仕様に従って合成イベントを定義し、すべてのブラウザと互換性があり、ブラウザのネイティブ イベントと同じインターフェイスを備えています。たとえば、
const button = <button onClick={handleClick}>按钮</button>
React では、すべてのイベントは合成であり、ネイティブ DOM イベントではありませんが、DOM イベントは e.nativeEvent プロパティを通じて取得できます。例:
const handleClick = (e) => console.log(e.nativeEvent);; const button = <button>按钮</button>
上記からわかるように、React イベントとネイティブ イベントは非常に似ていますが、いくつかの違いもあります:
-
イベント名の命名メソッドが異なります
// 原生事件绑定方式 <button onclick="handleClick()">按钮命名</button> // React 合成事件绑定方式 const button = <button onClick={handleClick}>按钮命名</button>
イベント ハンドラー関数の書き方が異なります
// 原生事件 事件处理函数写法 <button onclick="handleClick()">按钮命名</button> // React 合成事件 事件处理函数写法 const button = <button onClick={handleClick}>按钮命名</button>
onclick はDOM 要素では、実際にはイベント プロキシ関数を実際のノードに直接バインドするのではなく、すべてのイベントを構造の最外層にバインドし、統一されたイベントを使用してリッスンします。 [関連する推奨事項: Redis ビデオ チュートリアル 、プログラミング チュートリアル ]
このイベント リスナーは、すべてのコンポーネント内のイベント リスニングおよび処理関数を保存するためのマッピングを維持します。コンポーネントがマウントまたはマウント解除されるときは、この統合イベント リスナー上でいくつかのオブジェクトを挿入または削除するだけです。
イベントが発生すると、まずこの統合イベント リスナーによって処理され、次に実際のイベント処理関数がマッピング内で検出されて呼び出されます。これにより、イベントの処理とリサイクルのメカニズムが簡素化され、効率が大幅に向上します。
2. 実行シーケンス
React 合成イベントとネイティブ イベントの実行シーケンスについては、次の例を参照してください:
import React from 'react'; class App extends React.Component{ constructor(props) { super(props); this.parentRef = React.createRef(); this.childRef = React.createRef(); } componentDidMount() { console.log("React componentDidMount!"); this.parentRef.current?.addEventListener("click", () => { console.log("原生事件:父元素 DOM 事件监听!"); }); this.childRef.current?.addEventListener("click", () => { console.log("原生事件:子元素 DOM 事件监听!"); }); document.addEventListener("click", (e) => { console.log("原生事件:document DOM 事件监听!"); }); } parentClickFun = () => { console.log("React 事件:父元素事件监听!"); }; childClickFun = () => { console.log("React 事件:子元素事件监听!"); }; render() { return ( <div ref={this.parentRef} onClick={this.parentClickFun}> <div ref={this.childRef} onClick={this.childClickFun}> 分析事件执行顺序 </div> </div> ); } } export default App;
出力シーケンスは次のとおりです:
原生事件:子元素 DOM 事件监听! 原生事件:父元素 DOM 事件监听! React 事件:子元素事件监听! React 事件:父元素事件监听! 原生事件:document DOM 事件监听!
次の結論を導き出すことができます:
すべてのイベントがドキュメント オブジェクトにマウントされることに反応します
-
実際の DOM 要素がイベントをトリガーすると、ドキュメント オブジェクトにバブルアップして React イベントを処理します
したがって、ネイティブ イベントが最初に実行され、次にネイティブ イベントが実行されます。 React イベント
最後にドキュメントにマウントされたイベントを実際に実行します
- 合成イベント間のバブリングを防ぐには、 e.stopPropagation() を使用します。
- 合成イベントと最も外側のドキュメント上のイベントのバブリングを防ぐには、e.nativeEvent.stopImmediatePropagation() # を使用します。 ## 一番外側のドキュメント以外での合成イベントのバブリングを防止します。ネイティブ イベントでのバブリングは、e.target
-
document.body.addEventListener('click', e => { if (e.target && e.target.matches('div.code')) { return; } this.setState({ active: false, }); }); }
##React イベント メカニズムは次のように要約されます。
React に登録されたイベントは、最終的には React コンポーネントに対応する DOM ではなく、ドキュメントの DOM にバインドされます。 (すべてのイベントがドキュメントにバインドされ、他のノードにはバインドされたイベントがないため、メモリ オーバーヘッドが削減されます)
React 自体は一連のイベント バブリング メカニズムを実装しているため、event.stopPropagation が使用されます。 () 無効です。
React は、トリガーされたコンポーネントからキューを通じて親コンポーネントまでトレースバックし、JSX
React で定義されたコールバックを呼び出します。セット 独自の合成イベント SyntheticEvent
-
(学習ビデオ共有:
基本プログラミング ビデオ )
以上がReact の合成イベントを記述する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

HTMLとReactは、JSXを介してシームレスに統合して、効率的なユーザーインターフェイスを構築できます。 1)JSXを使用してHTML要素を埋め込み、2)仮想DOMを使用してレンダリングパフォーマンスを最適化し、3)コンポーネントを通じてHTML構造を管理およびレンダリングします。この統合方法は直感的であるだけでなく、アプリケーションのパフォーマンスを向上させます。

React Reactは、状態および小道具を介してデータを効率的にレンダリングし、合成イベントシステムを介してユーザーイベントを処理します。 1)Counterの例など、UseStateを使用して状態を管理します。 2)イベント処理は、ボタンクリックなどのJSXに関数を追加することにより実装されます。 3)トドリストコンポーネントなどのリストをレンダリングするには、重要な属性が必要です。 4)フォーム処理の場合、FormコンポーネントなどのuseStateおよびe.preventdefault()。

Reactは、HTTP要求を介してサーバーと対話し、データを取得、送信、更新、削除します。 1)ユーザー操作はイベントをトリガーします。2)HTTP要求を開始する、3)サーバーの応答をプロセス、4)コンポーネントのステータスと再レンダリングを更新します。

Reactは、コンポーネント開発と仮想DOMを通じて効率を向上させるユーザーインターフェイスを構築するためのJavaScriptライブラリです。 1。コンポーネントとJSX:JSX構文を使用してコンポーネントを定義して、コードの直感性と品質を高めます。 2。仮想DOMおよびレンダリング:仮想DOMおよびDIFFアルゴリズムを介してレンダリングパフォーマンスを最適化します。 3。状態管理とフック:UseStateやUseefectなどのフックは、状態管理と副作用の取り扱いを簡素化します。 4。使用例:基本形式から高度なグローバルな州管理まで、Contextapiを使用します。 5.一般的なエラーとデバッグ:不適切な状態管理とコンポーネントの更新の問題を避け、ReactDevtoolsを使用してデバッグします。 6。パフォーマンスの最適化と最適性

ReactisaFrontendLibrary、focusedonbuildinguserinterfaces.itmanagesUistateandupdateSeSefiedlyusingingingingualdod、およびinteractswithbackendservicesviaapisfordatahandling、butdoesnotprocessorstoredatoredaitaits

ReactをHTMLに組み込み、従来のHTMLページを強化または完全に書き換えることができます。 1)Reactを使用するための基本的な手順には、HTMLにルートDIVを追加し、ReactDom.Render()を介してReactコンポーネントをレンダリングすることが含まれます。 2)より高度なアプリケーションには、UseStateを使用して状態を管理し、カウンターやTo Doリストなどの複雑なUI相互作用を実装することが含まれます。 3)最適化とベストプラクティスには、コードセグメンテーション、怠zyな読み込み、React.memoとusememoを使用してパフォーマンスを向上させることが含まれます。これらの方法を通じて、開発者はReactの力を活用して、動的で応答性の高いユーザーインターフェイスを構築できます。

Reactは、最新のフロントエンドアプリケーションを構築するためのJavaScriptライブラリです。 1.パフォーマンスを最適化するために、コンポーネントおよび仮想DOMを使用します。 2。コンポーネントJSXを使用して、データを管理するために定義、状態、および属性を定義します。 3.フックはライフサイクル管理を簡素化します。 4. Contextapiを使用して、グローバルステータスを管理します。 5.一般的なエラーには、デバッグステータスの更新とライフサイクルが必要です。 6。最適化手法には、メモ、コード分割、仮想スクロールが含まれます。

Reactの未来は、究極のコンポーネント開発、パフォーマンスの最適化、および他のテクノロジースタックとの深い統合に焦点を当てます。 1)Reactは、コンポーネントの作成と管理をさらに簡素化し、究極のコンポーネント開発を促進します。 2)特に大規模なアプリケーションでは、パフォーマンスの最適化が焦点になります。 3)Reactは、開発エクスペリエンスを改善するために、GraphQLやTypeScriptなどのテクノロジーと深く統合されます。


ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

mPDF
mPDF は、UTF-8 でエンコードされた HTML から PDF ファイルを生成できる PHP ライブラリです。オリジナルの作者である Ian Back は、Web サイトから「オンザフライ」で PDF ファイルを出力し、さまざまな言語を処理するために mPDF を作成しました。 HTML2FPDF などのオリジナルのスクリプトよりも遅く、Unicode フォントを使用すると生成されるファイルが大きくなりますが、CSS スタイルなどをサポートし、多くの機能強化が施されています。 RTL (アラビア語とヘブライ語) や CJK (中国語、日本語、韓国語) を含むほぼすべての言語をサポートします。ネストされたブロックレベル要素 (P、DIV など) をサポートします。

SublimeText3 英語版
推奨: Win バージョン、コードプロンプトをサポート!

WebStorm Mac版
便利なJavaScript開発ツール

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

SublimeText3 Linux 新バージョン
SublimeText3 Linux 最新バージョン
