イベントの処理


n/a.ターゲット

  • イベント処理
  • について

    6.イベントの処理

  • 反応器はイベントについて以下のように説明した.
  • 「反応」領域でのイベントの処理方法は、DOM領域でのイベントの処理方法と非常に類似している.いくつかの構文の違いは次のとおりです.
  • Reactのイベントでは小文字は使用されません.
  • JSXを使用して、文字列ではなく関数にイベントハンドラを渡します.
  • HTMLとReactでイベントハンドラを渡すコードを比較します.
    <!-- HTML -->
    <button onclick="activateLasers()">
      Activate Lasers
    </button>
    // React
    <button onClick={activateLasers}>
      Activate Lasers
    </button>

    6-1. 合成イベント

  • HTMLでは、falseを返すことでデフォルトの動作を防止できます.
  • <form onsubmit="console.log('You clicked submit.'); return false">
      <button type="submit">Submit</button>
    </form>
  • ですが、反応器でfalseを返しても基本動作は防げません.
  • コール予防Defaultを明確にする必要があります.
  • function Form() {
      function handleSubmit(e) {
        e.preventDefault();
        console.log('You clicked submit.');
      }
    
      return (
        <form onSubmit={handleSubmit}>
          <button type="submit">Submit</button>
        </form>
      );
    }
  • 上のコードでは、handleSubmitのパラメータeを合成イベントと呼ぶ.詳細はここです。で確認できます.
  • イベントハンドラは、同じイベント処理のためのイベントRapper SyntheticEventオブジェクトをすべてのブラウザで受信する.
  • export default function Event() {
      const onClick = (e) => {
        console.dir(e);
      };
    
      return (
        <div>
          <button onClick={onClick}>button</button>
        </div>
      );
    }
    出力
  • SyntheticEventオブジェクトは、以下のようになります.
  • stopPropagation()とpreventDefault()を含め、すべてのブラウザでインタフェースの動作は同じです.
  • ブラウザ固有イベントが必要な場合はNativeEvent Treviewを参照してください.
  • さらに、合成イベントは、ブラウザ固有のイベントに直接対応するのではなく、異なる.
  • たとえば、onMouseLeaveでイベントを実行します.nativeEventとはmouseoutイベントのことです.

    6-2. イベントフロー

  • DOMイベントフローは、3つのフェーズから構成される.
  • キャプチャフェーズ
  • ターゲットフェーズ
  • Bubblingフェーズ
  • <style>
      body * {
        margin: 10px;
        border: 1px solid blue;
      }
    </style>
    
    <form>FORM</form>
    
    <script>
      for (let elem of document.querySelectorAll('*')) {
        elem.addEventListener("click", e => console.log(`캡쳐링: ${elem.tagName}`), true);
        elem.addEventListener("click", e => console.log(`버블링: ${elem.tagName}`));
      }
      
      document.querySelector("form").onclick = function () {
        console.log("click");
      };
    </script>
  • フォームラベルをクリックすると、次の操作が実行されます.
  • // 결과
    "Capturing: HTML"
    "Capturing: BODY"
    "Capturing: FORM"
    "Bubbling: FORM"
    "click"
    "Bubbling: BODY"
    "Bubbling: HTML"
  • を整理すると、スクリーンショット段階とは親から子まで、どの部分が活動しているのかを確認する過程です.
  • Bubblingフェーズとは、事件が発生したEllimentから、事件を親に整理することです.実際の事件はバブル化段階で発生した.
  • 6-2-1. レスポンス中のイベントフロー

  • 反応では、onClickCaptureを使用して、キャプチャ段階でイベントハンドルを使用することができる.
  • export default function Event() {
      const onClickCaputreParent = () => {
        console.log("onClickCaputreDivParent");
      };
    
      const onClickCaputreChild = () => {
        console.log("onClickCaputreDivChild");
      };
    
      const onClickCaputreButton = () => {
        console.log("onClickCaputreButton");
      };
    
      const onClickBubbleParent = () => {
        console.log("onClickBubbleDivParent");
      };
    
      const onClickBubbleChild = () => {
        console.log("onClickBubbleDivChild");
      };
    
      const onClickBubbleButton = (e) => {
        console.log("onClickBubbleButton");
        console.log(e);
      };
    
      return (
        <div onClickCapture={onClickCaputreParent} onClick={onClickBubbleParent}>
          <div onClickCapture={onClickCaputreChild} onClick={onClickBubbleChild}>
            <button
              onClickCapture={onClickCaputreButton}
              onClick={onClickBubbleButton}
            >
              button
            </button>
          </div>
        </div>
      );
    }
    
    // 결과
    "onClickCaputreDivParent"
    "onClickCaputreDivChild"
    "onClickCaputreButton"
    "onClickBubbleButton"
    SyntheticBaseEvent {_reactName: 'onClick', _targetInst: null, type: 'click', nativeEvent: PointerEvent, target: button,}
    "onClickBubbleDivChild"
    "onClickBubbleDivParent"

    6-3. イベントのタイプ

  • 次イベントはbublingフェーズで呼び出されます.詳細はここです。で確認できます.
  • Clipboardアクティビティ
  • コンビネーションアクティビティ
  • キーボードイベント
  • Focusアクティビティ
  • Formアクティビティ
  • Genericアクティビティ
  • Mouseアクティビティ
  • Pointerアクティビティ
  • 選択アクティビティ
  • Touchアクティビティ
  • UIイベント
  • WHrイベント
  • メディアイベント
  • 画像イベント
  • アニメーションアクティビティ
  • Transitionアクティビティ
  • その他の活動
  • の上のイベントで、次のようにFocusイベントを表示します.
  • onFocus
  • ユニット(またはサブユニット)のフォーカス時に呼び出されます.
  • たとえば
  • で、「input」をクリックしてフォーカスを取得すると、コンソールが出力されます.
  • onBlur
  • ユニット(またはサブユニット)からフォーカスが消えたときに呼び出される.
  • 例えば、
  • は、フォーカスされた入力から別のシンボルにフォーカスされた後、出力コンソールを出力する.
  • function Example() {
      return (
        <input
          onFocus={(e) => {
            console.log('Focused on input');
          }}
          onBlur={(e) => {
            console.log('Triggered because this input lost focus');
          }}
          placeholder="onFocus is triggered when you click this input."
        />
      )
    }

    ソース

  • handling-events(React)
  • events(react)