「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > 上級レベル: React でのイベントの処理

上級レベル: React でのイベントの処理

2024 年 7 月 31 日に公開
ブラウズ:264

Senior level: Handling Events in React

上級開発者として、React でのイベント処理を深く理解していることが期待されます。これには、基本を理解するだけでなく、効率的で保守可能でスケーラブルなアプリケーションを作成するための高度なテクニックを習得することも含まれます。この記事では、イベント ハンドラーの追加、合成イベントの理解、イベント ハンドラーへの引数の受け渡し、カスタム イベントの作成、イベント委任の活用など、React でのイベント処理の複雑さについて説明します。

イベント処理

JSX でのイベント ハンドラーの追加

JSX でのイベント ハンドラーの追加は簡単で、通常の HTML でのイベントの処理に似ていますが、React の独自のアーキテクチャによる重要な違いがいくつかあります。

イベントハンドラーの追加例:

import React from 'react';

const handleClick = () => {
  console.log('Button clicked!');
};

const App = () => {
  return (
    
); }; export default App;

この例では、ボタンがクリックされるたびに handleClick 関数が呼び出されます。 JSX の onClick 属性は、イベント ハンドラーを指定するために使用されます。

合成イベント

React は合成イベントと呼ばれるシステムを使用してイベントを処理します。合成イベントは、ブラウザーのネイティブ イベント システムのクロスブラウザー ラッパーです。これにより、イベントが異なるブラウザ間で一貫して動作することが保証され、統一された API が提供されます。

合成イベントの例:

import React from 'react';

const handleInputChange = (event) => {
  console.log('Input value:', event.target.value);
};

const App = () => {
  return (
    
); }; export default App;

この例では、handleInputChange 関数は、入力フィールドの値が変更されるたびにその値を記録します。イベント パラメーターは、すべてのブラウザーにわたって一貫したイベント プロパティを提供する合成イベントです。

イベントハンドラーに引数を渡す

イベント ハンドラーに引数を渡すには、アロー関数またはバインド メソッドを使用します。これは、より柔軟な方法でイベントを処理するために重要です。

アロー関数の使用例:

import React from 'react';

const handleClick = (message) => {
  console.log(message);
};

const App = () => {
  return (
    
); }; export default App;

バインドメソッドを使用した例:

import React from 'react';

const handleClick = (message) => {
  console.log(message);
};

const App = () => {
  return (
    
); }; export default App;

どちらのメソッドでも、追加の引数を handleClick 関数に渡すことができるため、イベント処理が柔軟になります。

カスタムイベント処理

カスタムイベントの作成

React でカスタム イベントを作成することは、標準イベントではカバーされないより複雑なインタラクションに必要です。カスタム イベントは、CustomEvent コンストラクターとdispatchEvent メソッドを使用して作成およびディスパッチできます。

カスタム イベントの作成とディスパッチの例:

import React, { useEffect, useRef } from 'react';

const CustomEventComponent = () => {
  const buttonRef = useRef(null);

  useEffect(() => {
    const handleCustomEvent = (event) => {
      console.log(event.detail.message);
    };

    const button = buttonRef.current;
    button.addEventListener('customEvent', handleCustomEvent);

    return () => {
      button.removeEventListener('customEvent', handleCustomEvent);
    };
  }, []);

  const handleClick = () => {
    const customEvent = new CustomEvent('customEvent', {
      detail: { message: 'Custom event triggered!' },
    });
    buttonRef.current.dispatchEvent(customEvent);
  };

  return (
    
  );
};

export default CustomEventComponent;

この例では、customEvent という名前のカスタム イベントが作成され、ボタンがクリックされたときに送出されます。イベント ハンドラーはカスタム イベントをリッスンし、イベントの詳細メッセージをログに記録します。

React でのイベント委任

イベント委任は、単一のイベント リスナーを使用して複数の要素のイベントを管理する手法です。これは、リストやテーブルでイベントを効率的に管理する場合に特に便利です。

イベント委任の例:

import React from 'react';

const handleClick = (event) => {
  if (event.target.tagName === 'BUTTON') {
    console.log(`Button ${event.target.textContent} clicked!`);
  }
};

const App = () => {
  return (
    
); }; export default App;

この例では、div 要素の単一のイベント ハンドラーがすべてのボタンのクリック イベントを管理します。イベント ハンドラーは、event.target をチェックしてどのボタンがクリックされたかを判断し、それに応じてメッセージを記録します。

React でのイベント処理のベスト プラクティス

  1. JSX でのインライン関数の作成を避ける: render メソッド内で新しい関数を作成すると、不必要な再レンダリングやパフォーマンスの問題が発生する可能性があります。代わりに、イベント ハンドラーをクラス メソッドとして定義するか、フックを使用します。
   const App = () => {
     const handleClick = () => {
       console.log('Button clicked!');
     };

     return (
       
); };
  1. デフォルト動作の防止と伝播の停止: デフォルト動作を防止するには、event.preventDefault() を使用し、必要に応じてイベントの伝播を停止するには、event.stopPropagation() を使用します。
   const handleSubmit = (event) => {
     event.preventDefault();
     // Handle form submission
   };

   return 
...
;
  1. イベント リスナーのクリーンアップ: イベント リスナーを DOM 要素に直接追加する場合は、メモリ リークを避けるためにイベント リスナーを必ずクリーンアップしてください。
   useEffect(() => {
     const handleResize = () => {
       console.log('Window resized');
     };

     window.addEventListener('resize', handleResize);

     return () => {
       window.removeEventListener('resize', handleResize);
     };
   }, []);
  1. 高周波イベントのデバウンスまたはスロットル: スクロールやサイズ変更などの高周波イベントに対してデバウンスまたはスロットル手法を使用して、パフォーマンスを向上させます。
   const debounce = (func, delay) => {
     let timeoutId;
     return (...args) => {
       clearTimeout(timeoutId);
       timeoutId = setTimeout(() => {
         func.apply(null, args);
       }, delay);
     };
   };

   useEffect(() => {
     const handleScroll = debounce(() => {
       console.log('Scroll event');
     }, 300);

     window.addEventListener('scroll', handleScroll);

     return () => {
       window.removeEventListener('scroll', handleScroll);
     };
   }, []);
  1. イベント委任を賢く使用する: アイテムのリストなど、DOM に動的に追加または削除される要素にイベント委任を活用します。
   const List = () => {
     const handleClick = (event) => {
       if (event.target.tagName === 'LI') {
         console.log(`Item ${event.target.textContent} clicked!`);
       }
     };

     return (
       
  • Item 1
  • Item 2
  • Item 3
); };

結論

React でイベントを効率的に処理することは、インタラクティブで高性能なアプリケーションを作成するために重要です。イベント ハンドラーの追加、合成イベントの使用、イベント ハンドラーへの引数の受け渡し、カスタム イベントの作成、イベント委任の活用などのテクニックを習得することで、堅牢でスケーラブルなアプリケーションを構築できます。ベスト プラクティスを実装すると、コードが複雑になっても保守性とパフォーマンスが維持されます。上級開発者として、これらの高度なテクニックを活用する能力は、プロジェクトの成功とチームの有効性に大きく貢献します。

リリースステートメント この記事は次の場所に転載されています: https://dev.to/david_zamoraballesteros_/senior-level-handling-events-in-react-9h8?1 侵害がある場合は、[email protected] に連絡して削除してください。
最新のチュートリアル もっと>

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3