日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

深入了解React中的合成事件

瀏覽:184日期:2022-06-01 11:52:30

1 事件三個階段 捕獲、目標、處理 (具體百度,后面有空補全)

2 示例

import React from "react"; class Test extends React.Component {  parentRef;  childRef;  constructor(props) {    super(props);    this.parentRef = React.createRef();    this.childRef = React.createRef();  }  componentDidMount() {    document.addEventListener(      "click",      () => {console.log(`document原生事件捕獲`);      },      true    );    document.addEventListener("click", () => {      console.log(`document原生事件冒泡`);    });    this.parentRef.current.addEventListener(      "click",      () => {console.log(`父元素原生事件捕獲`);      },      true    );    this.parentRef.current.addEventListener("click", () => {      console.log(`父元素原生事件冒泡`);    });    this.childRef.current.addEventListener(      "click",      () => {console.log(`子元素原生事件捕獲`);      },      true    );    this.childRef.current.addEventListener("click", () => {      console.log(`子元素原生事件冒泡`);    });  }  handleParentBubble = () => {    console.log(`父元素React事件冒泡`);  };  handleChildBubble = (e) => {    console.log(`子元素React事件冒泡`);  };  handleParentCapture = () => {    console.log(`父元素React事件捕獲`);  };  handleChileCapture = () => {    console.log(`子元素React事件捕獲`);  };  render() {    return (      <divref={this.parentRef}onClick={this.handleParentBubble}onClickCapture={this.handleParentCapture}      ><div  ref={this.childRef}  onClick={this.handleChildBubble}  onClickCapture={this.handleChileCapture}>  事件處理測試</div>      </div>    );  }} export default Test;

執行順序

只留子元素修改代碼

import React from "react"; class Test extends React.Component {  parentRef;  childRef;  constructor(props) {    super(props);    this.parentRef = React.createRef();    this.childRef = React.createRef();  }  componentDidMount() {    document.addEventListener(      "click",      () => {console.log(`document原生事件捕獲`);      },      true    );    document.addEventListener("click", () => {      console.log(`document原生事件冒泡`);    });    // this.parentRef.current.addEventListener(    //   "click",    //   () => {    //     console.log(`父元素原生事件捕獲`);    //   },    //   true    // );    // this.parentRef.current.addEventListener("click", () => {    //   console.log(`父元素原生事件冒泡`);    // });    this.childRef.current.addEventListener(      "click",      () => {console.log(`子元素原生事件捕獲`);      },      true    );    this.childRef.current.addEventListener("click", () => {      console.log(`子元素原生事件冒泡`);    });  }  // handleParentBubble = () => {  //   console.log(`父元素React事件冒泡`);  // };  handleChildBubble = (e) => {    console.log(`子元素React事件冒泡`);  };  // handleParentCapture = () => {  //   console.log(`父元素React事件捕獲`);  // };  handleChileCapture = () => {    console.log(`子元素React事件捕獲`);  };  render() {    return (      <divref={this.childRef}onClick={this.handleChildBubble}onClickCapture={this.handleChileCapture}      >事件處理測試      </div>    );    return (      <divref={this.parentRef}onClick={this.handleParentBubble}onClickCapture={this.handleParentCapture}      ><div  ref={this.childRef}  onClick={this.handleChildBubble}  onClickCapture={this.handleChileCapture}>  事件處理測試</div>      </div>    );  }} export default Test;

document原生事件捕獲--》子元素React事件捕獲--》子元素原生事件捕獲--》子元素原生事件冒泡--》子元素React事件冒泡--》document原生事件冒泡

從這個執行順序來看,react事件捕獲執行比原生事件捕獲早,但是原生事件冒泡執行比react事件冒泡快。

所有的react捕獲事件執行完畢之后才會去執行原生的捕獲事件(document原生事件捕獲最先執行)

3 子元素阻止react事件冒泡

e.stopPropagation();

import React from "react"; class Test extends React.Component {  parentRef;  childRef;  constructor(props) {    super(props);    this.parentRef = React.createRef();    this.childRef = React.createRef();  }  componentDidMount() {    document.addEventListener(      "click",      () => {console.log(`document原生事件捕獲`);      },      true    );    document.addEventListener("click", () => {      console.log(`document原生事件冒泡`);    });    this.parentRef.current.addEventListener(      "click",      () => {console.log(`父元素原生事件捕獲`);      },      true    );    this.parentRef.current.addEventListener("click", () => {      console.log(`父元素原生事件冒泡`);    });    this.childRef.current.addEventListener(      "click",      () => {console.log(`子元素原生事件捕獲`);      },      true    );    this.childRef.current.addEventListener("click", () => {      console.log(`子元素原生事件冒泡`);    });  }  handleParentBubble = () => {    console.log(`父元素React事件冒泡`);  };  handleChildBubble = (e) => {    e.stopPropagation();    console.log(`子元素React事件冒泡`);  };  handleParentCapture = () => {    console.log(`父元素React事件捕獲`);  };  handleChileCapture = () => {    console.log(`子元素React事件捕獲`);  };  render() {    return (      <divref={this.parentRef}onClick={this.handleParentBubble}onClickCapture={this.handleParentCapture}      ><div  ref={this.childRef}  onClick={this.handleChildBubble}  onClickCapture={this.handleChileCapture}>  事件處理測試</div>      </div>    );  }} export default Test;

執行順序

e.stopPropagation()只能阻止react合成事件的冒泡和document原生事件冒泡,并不能阻止自己和父元素原生事件的冒泡。

e.nativeEvent.stopImmediatePropagation()只能阻止document原生事件冒泡。

e.preventDefault()和不執行一樣

e.nativeEvent.stopPropagation()只能阻止document原生事件冒泡。

如果我們在子原生的原聲事件里面阻止冒泡,都阻止了。

import React from "react"; class Test extends React.Component {  parentRef;  childRef;  constructor(props) {    super(props);    this.parentRef = React.createRef();    this.childRef = React.createRef();  }  componentDidMount() {    document.addEventListener(      "click",      () => {console.log(`document原生事件捕獲`);      },      true    );    document.addEventListener("click", () => {      console.log(`document原生事件冒泡`);    });    this.parentRef.current.addEventListener(      "click",      () => {console.log(`父元素原生事件捕獲`);      },      true    );    this.parentRef.current.addEventListener("click", () => {      console.log(`父元素原生事件冒泡`);    });    this.childRef.current.addEventListener(      "click",      () => {console.log(`子元素原生事件捕獲`);      },      true    );    this.childRef.current.addEventListener("click", (e) => {      e.stopPropagation();      console.log(`子元素原生事件冒泡`);    });  }  handleParentBubble = () => {    console.log(`父元素React事件冒泡`);  };  handleChildBubble = (e) => {    console.log(`子元素React事件冒泡`);  };  handleParentCapture = () => {    console.log(`父元素React事件捕獲`);  };  handleChileCapture = () => {    console.log(`子元素React事件捕獲`);  };  render() {    return (      <divref={this.parentRef}onClick={this.handleParentBubble}onClickCapture={this.handleParentCapture}      ><div  ref={this.childRef}  onClick={this.handleChildBubble}  onClickCapture={this.handleChileCapture}>  事件處理測試</div>      </div>    );  }} export default Test;

執行順序

在子元素的原聲事件里面,阻止了所有的冒泡。同時也阻止了react事件。

在父元素原生事件中阻止冒泡

import React from "react"; class Test extends React.Component {  parentRef;  childRef;  constructor(props) {    super(props);    this.parentRef = React.createRef();    this.childRef = React.createRef();  }  componentDidMount() {    document.addEventListener(      "click",      () => {console.log(`document原生事件捕獲`);      },      true    );    document.addEventListener("click", () => {      console.log(`document原生事件冒泡`);    });    this.parentRef.current.addEventListener(      "click",      () => {console.log(`父元素原生事件捕獲`);      },      true    );    this.parentRef.current.addEventListener("click", (e) => {      e.stopPropagation();      console.log(`父元素原生事件冒泡`);    });    this.childRef.current.addEventListener(      "click",      () => {console.log(`子元素原生事件捕獲`);      },      true    );    this.childRef.current.addEventListener("click", (e) => {      console.log(`子元素原生事件冒泡`);    });  }  handleParentBubble = () => {    console.log(`父元素React事件冒泡`);  };  handleChildBubble = (e) => {    console.log(`子元素React事件冒泡`);  };  handleParentCapture = () => {    console.log(`父元素React事件捕獲`);  };  handleChileCapture = () => {    console.log(`子元素React事件捕獲`);  };  render() {    return (      <divref={this.parentRef}onClick={this.handleParentBubble}onClickCapture={this.handleParentCapture}      ><div  ref={this.childRef}  onClick={this.handleChildBubble}  onClickCapture={this.handleChileCapture}>  事件處理測試</div>      </div>    );  }} export default Test;

執行順序

父元素原生事件中阻止冒泡阻止了react事件

阻止document原生事件的冒泡并不會阻止了react事件

 document.addEventListener("click", (e) => {      e.stopPropagation();      console.log(`document原生事件冒泡`); });

結論

react捕獲事件快于原生捕獲事件的執行

react冒泡事件慢于原生冒泡事件的執行

原生冒泡事件會阻止react事件。

以上就是深入了解React中的合成事件的詳細內容,更多關于React合成事件的資料請關注其它相關文章!

標簽: JavaScript
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
亚洲欧美日本视频在线观看| 亚洲精品一二| 久久中文字幕一区二区| 精品久久网站| 日韩视频网站在线观看| 久久久精品国产**网站| 国产精品mv在线观看| 日韩精品免费视频人成| 国产日韩欧美三级| 国产精品一区二区三区www| 欧美精品福利| xxxxx性欧美特大| 国产 日韩 欧美一区| 免费高潮视频95在线观看网站| 国产福利电影在线播放| 国产91精品对白在线播放| 激情欧美日韩一区| 日本免费在线视频不卡一不卡二| 亚洲精品乱码日韩| 日韩视频二区| 午夜性色一区二区三区免费视频| 婷婷综合国产| 欧美男人天堂| 久久亚洲影院| 日韩精品高清不卡| 国产一区二区三区视频在线| 久久精品卡一| 国产午夜久久av| 中文一区一区三区高中清不卡免费| 亚洲国产一区二区在线观看| 欧美日韩一区二区三区不卡视频 | 日韩三级视频| 国产精品视频一区二区三区四蜜臂| 成人在线观看免费视频| 影音先锋久久| 国产精品九九| 久久av电影| 日韩一区二区三区免费| 亚洲欧美日韩视频二区| 国产一区 二区| 超碰99在线| 久久不射中文字幕| 国产日韩高清一区二区三区在线| 麻豆精品在线播放| 人人香蕉久久| 丝袜诱惑制服诱惑色一区在线观看 | 久久福利在线| 国产一区调教| 中文字幕免费精品| 国产高清不卡| 男人的天堂久久精品| 久草精品视频| 日韩精品一级中文字幕精品视频免费观看 | 麻豆精品久久| 婷婷成人基地| 免费亚洲婷婷| 久久激情一区| 国产日韩视频在线| 影视先锋久久| 国产黄色精品| 另类亚洲自拍| 欧美三级第一页| 五月天久久网站| 国产成人久久| 亚洲日本欧美| 免费观看在线综合| 免费不卡中文字幕在线| 久久精品国产亚洲一区二区三区| 视频一区日韩| 午夜一级在线看亚洲| 国产一区2区| 麻豆久久久久久| 日韩超碰人人爽人人做人人添| 日本精品在线中文字幕| 精品视频高潮| 国产美女撒尿一区二区| 欧美+日本+国产+在线a∨观看| 国产精品13p| 中文字幕免费一区二区| 日韩成人三级| 日产午夜精品一线二线三线| 你懂的网址国产 欧美| 久久中文在线| 97精品在线| 欧美三区四区| 亚洲激精日韩激精欧美精品| 国产亚洲高清视频| 国产一级久久| 亚洲最大av| 日本不卡中文字幕| 美美哒免费高清在线观看视频一区二区 | 国产亚洲久久| 奶水喷射视频一区| 免费看黄色91| 91精品在线免费视频| 日本精品另类| 精品亚洲成人| 麻豆精品蜜桃视频网站| 国产精品三p一区二区| 国产精品欧美三级在线观看 | 精精国产xxxx视频在线野外| 精品一区二区男人吃奶| 色综合狠狠操| 在线一区视频| 国产精选一区| 伊人久久高清| 久久国产88| 久久精品伊人| 亚洲成人三区| 国产精品欧美大片| 色婷婷久久久| 久久午夜精品| 国产精品毛片一区二区在线看| 久久国产精品亚洲77777| 国产精品视频一区二区三区四蜜臂| 人在线成免费视频| 亚洲一级网站| 久久中文字幕一区二区| 亚洲大片在线| 国产精品一区二区三区四区在线观看 | 爽好久久久欧美精品| 国产欧美日韩一级| 久久久天天操| 亚洲tv在线| 久久影院午夜精品| 亚洲欧洲美洲国产香蕉| 国产黄大片在线观看| 天堂资源在线亚洲| 久久精品色播| 国产精品一区二区99| 国产精品毛片在线| 福利视频一区| 国产一卡不卡| 四虎精品永久免费| 国产一在线精品一区在线观看| 欧美aa在线视频| 青草综合视频| 亚洲大全视频| 精品国产亚洲一区二区三区在线| 国产麻豆精品| 国产欧美日韩亚洲一区二区三区| 亚洲精品在线二区| 蜜臀久久99精品久久久久久9| 免费成人网www| 日本久久成人网| 91精品蜜臀一区二区三区在线 | 国产资源在线观看入口av| 日韩福利在线观看| 日韩一区网站| 婷婷综合激情| 婷婷成人基地| 欧美特黄一区| 亚洲激情五月| 丝袜诱惑制服诱惑色一区在线观看| 国产麻豆综合| 日本不卡不码高清免费观看| 天堂av一区| 国产一区二区三区四区五区传媒| 国产在线日韩精品| 亚洲天堂av影院| 在线视频精品| 卡一精品卡二卡三网站乱码| 亚洲91视频| 日韩黄色av| 国产精品黄网站| 午夜av不卡| 日本欧洲一区二区| 麻豆国产欧美日韩综合精品二区| 精品美女在线视频| 影音先锋久久| 久久精品国产99| 欧美亚洲国产激情| 在线一区免费| 视频一区视频二区中文| 欧美二区视频| 日韩精品三级| 国产精区一区二区| 久久精品国产免费| 精品日韩一区| 国产精品毛片久久久| 久久精品高清| 久久国产毛片| 久久精品成人| 国产尤物精品| 欧美资源在线| 日韩精品第二页| 欧美一区网站| 精品国产乱码| 成人羞羞视频在线看网址| 亚洲成人国产| 亚洲我射av| 日韩在线观看中文字幕| 91精品国产自产观看在线| 欧美日韩亚洲一区| 日韩高清在线观看一区二区| 国产精区一区二区| 欧洲毛片在线视频免费观看| 精品久久91| 亚洲图片久久| 免费在线欧美黄色|