Heim > Artikel > Web-Frontend > So verhindern Sie Blasenfehler in der Reaktion
Reaktionsmethoden zur Verhinderung von Blasenbildung: 1. Wenn keine native Ereignisregistrierung vorliegt und nur Reaktionsereignisse beteiligt sind, verwenden Sie [e.stopPropagation()], um Blasenbildung zu verhindern. 2. Sie müssen [e.nativeEvent.stopImmediatePropagation ()]-Methode.
Methoden zum Reagieren, um Blasenbildung zu verhindern:
1. Wenn keine native Ereignisregistrierung vorliegt und nur Reaktionsereignisse beteiligt sind, verwenden Sie e.stopPropagation()
, um Blasenbildung zu verhindern , Code wie folgt: 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
注册了原生的事件后,用e.stopPropagation()是不能阻止与document之间的冒泡,这时候需要用到e.nativeEvent.stopImmediatePropagation()
方法,代码如下:
import React, { Component } from 'react'; import './App.css'; class App extends Component { componentDidMount() { document.addEventListener('click', this.handleDocumentClick, false); } handleDocumentClick = (e) => { console.log('handleDocumentClick: ', e); } handleClickTestBox = (e) => { console.warn('handleClickTestBox: ', e); } handleClickTestBox2 = (e) => { console.warn('handleClickTestBox2: ', e); } handleClickTestBox3 = (e) => { // 阻止合成事件的冒泡 e.stopPropagation(); // 阻止与原生事件的冒泡 e.nativeEvent.stopImmediatePropagation(); 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;
3、阻止合成事件与非合成事件(除了document)之间的冒泡,以上两种方式都不适用,需要用到e.target
import React, { Component } from 'react'; import './App.css'; class App extends Component { componentDidMount() { document.addEventListener('click', this.handleDocumentClick, false); document.body.addEventListener('click', this.handleBodyClick, false); } handleDocumentClick = (e) => { console.log('handleDocumentClick: ', e); } handleBodyClick = (e) => { if (e.target && e.target === document.querySelector('#inner')) { return; } console.log('handleBodyClick: ', e); } handleClickTestBox = (e) => { console.warn('handleClickTestBox: ', e); } handleClickTestBox2 = (e) => { console.warn('handleClickTestBox2: ', e); } handleClickTestBox3 = (e) => { // 阻止合成事件的冒泡 e.stopPropagation(); // 阻止与原生事件的冒泡 e.nativeEvent.stopImmediatePropagation(); console.warn('handleClickTestBox3: ', e); } render() { return ( <div className="test-box" onClick={this.handleClickTestBox} > <div onClick={this.handleClickTestBox2} > <div id="inner" onClick={this.handleClickTestBox3} > </div> </div> </div> ); } } export default App;2. Wenn Sie
document.addEventListener
verwenden, um ein natives Ereignis zu registrieren, kann die Verwendung von e.stopPropagation() das Sprudeln mit dem Dokument nicht verhindern. In diesem Fall kann e. nativeEvent.stopImmediatePropagation()
-Methode, der Code lautet wie folgt: rrreeeJavaScript🎜 (Video) 🎜🎜3. Verhindern Sie das Sprudeln zwischen synthetischen Ereignissen und nicht-synthetischen Ereignissen (außer document), Sie müssen e.target Urteil, der Code lautet wie folgt: rrreee
Verwandte kostenlose Lernempfehlungen:
Das obige ist der detaillierte Inhalt vonSo verhindern Sie Blasenfehler in der Reaktion. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!