ホームページ  >  記事  >  ウェブフロントエンド  >  Reactでのバブリング失敗を防ぐ方法

Reactでのバブリング失敗を防ぐ方法

coldplay.xixi
coldplay.xixiオリジナル
2020-11-17 14:08:092009ブラウズ

バブリングの失敗を防ぐための反応の方法: 1. ネイティブ イベントの登録がなく、反応イベントのみが関係する場合は、[e.stopPropagation()] を使用してバブリングを防ぎます; 2. [e .nativeEvent.stopImmediatePropagation()] メソッド。

Reactでのバブリング失敗を防ぐ方法

React のバブリング失敗を防ぐ方法:

1. ネイティブ イベントがない場合は、反応イベントのみが登録されますe.stopPropagation() を使用してバブリングを停止する場合、コードは次のとおりです:

import React, { Component } from 'react';
import './App.css';
class App extends Component {
  handleClickTestBox = (e) => {
    console.warn('handleClickTestBox: ', e);
  }
  handleClickTestBox2 = (e) => {
    console.warn('handleClickTestBox2: ', e);
  }
  handleClickTestBox3 = (e) => {
    e.stopPropagation();
    console.warn('handleClickTestBox3: ', e);
  }
  render() {
    return (
      <div
        className="test-box"
        onClick={this.handleClickTestBox}
      >
        <div
          onClick={this.handleClickTestBox2}
        >
          <div
            onClick={this.handleClickTestBox3}
          >
          </div>
        </div>
      </div>
    );
  }
}
export default App;

2. document.addEventListener を使用してネイティブ イベントを登録した後, use e .stopPropagation() ではドキュメントのバブリングを防ぐことはできません。この場合、e.nativeEvent.stopImmediatePropagation() メソッドを使用する必要があります。コードは次のとおりです:

import React, { Component } from &#39;react&#39;;
import &#39;./App.css&#39;;
class App extends Component {
  componentDidMount() {
    document.addEventListener(&#39;click&#39;, this.handleDocumentClick, false);
  }
  handleDocumentClick = (e) => {
    console.log(&#39;handleDocumentClick: &#39;, e);
  }
  handleClickTestBox = (e) => {
    console.warn(&#39;handleClickTestBox: &#39;, e);
  }
  handleClickTestBox2 = (e) => {
    console.warn(&#39;handleClickTestBox2: &#39;, e);
  }
  handleClickTestBox3 = (e) => {
    // 阻止合成事件的冒泡
    e.stopPropagation();
    // 阻止与原生事件的冒泡
    e.nativeEvent.stopImmediatePropagation();
    console.warn(&#39;handleClickTestBox3: &#39;, e);
  }
  render() {
    return (
      <div
        className="test-box"
        onClick={this.handleClickTestBox}
      >
        <div
          onClick={this.handleClickTestBox2}
        >
          <div
            onClick={this.handleClickTestBox3}
          >
          </div>
        </div>
      </div>
    );
  }
}
export default App;

3. 合成イベントの防止 非合成イベント(ドキュメントを除く)間のバブリングについては、上記 2 つの方法は適用できません。##e.target を使用して判断する必要があります。コードは次のとおりです。 #<pre class="brush:php;toolbar:false">import React, { Component } from &amp;#39;react&amp;#39;; import &amp;#39;./App.css&amp;#39;; class App extends Component { componentDidMount() { document.addEventListener(&amp;#39;click&amp;#39;, this.handleDocumentClick, false); document.body.addEventListener(&amp;#39;click&amp;#39;, this.handleBodyClick, false); } handleDocumentClick = (e) =&gt; { console.log(&amp;#39;handleDocumentClick: &amp;#39;, e); } handleBodyClick = (e) =&gt; { if (e.target &amp;&amp; e.target === document.querySelector(&amp;#39;#inner&amp;#39;)) { return; } console.log(&amp;#39;handleBodyClick: &amp;#39;, e); } handleClickTestBox = (e) =&gt; { console.warn(&amp;#39;handleClickTestBox: &amp;#39;, e); } handleClickTestBox2 = (e) =&gt; { console.warn(&amp;#39;handleClickTestBox2: &amp;#39;, e); } handleClickTestBox3 = (e) =&gt; { // 阻止合成事件的冒泡 e.stopPropagation(); // 阻止与原生事件的冒泡 e.nativeEvent.stopImmediatePropagation(); console.warn(&amp;#39;handleClickTestBox3: &amp;#39;, e); } render() { return ( &lt;div className=&quot;test-box&quot; onClick={this.handleClickTestBox} &gt; &lt;div onClick={this.handleClickTestBox2} &gt; &lt;div id=&quot;inner&quot; onClick={this.handleClickTestBox3} &gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt; ); } } export default App;</pre>

関連の無料学習に関する推奨事項:
JavaScript

(ビデオ)

以上がReactでのバブリング失敗を防ぐ方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。