返回顶部
首页 > 资讯 > 精选 >React中的合成事件怎么实现
  • 494
分享到

React中的合成事件怎么实现

2023-07-05 04:07:57 494人浏览 泡泡鱼
摘要

这篇文章主要介绍了React中的合成事件怎么实现的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇React中的合成事件怎么实现文章都会有所收获,下面我们一起来看看吧。1 事件三个阶段 捕获、目标、处理 (具体百度

这篇文章主要介绍了React中的合成事件怎么实现的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇React中的合成事件怎么实现文章都会有所收获,下面我们一起来看看吧。

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 (      <div        ref={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", () => {    //   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 (      <div        ref={this.childRef}        onClick={this.handleChildBubble}        onClickCapture={this.handleChileCapture}      >        事件处理测试      </div>    );    return (      <div        ref={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事件捕获--》子元素原生事件捕获--》子元素原生事件冒泡--》子元素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 (      <div        ref={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原生事件冒泡,并不能阻止自己和父元素原生事件的冒泡。

React中的合成事件怎么实现

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

React中的合成事件怎么实现

e.preventDefault()和不执行一样

React中的合成事件怎么实现

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

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", () => {      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 (      <div        ref={this.parentRef}        onClick={this.handleParentBubble}        onClickCapture={this.handleParentCapture}      >        <div          ref={this.childRef}          onClick={this.handleChildBubble}          onClickCapture={this.handleChileCapture}        >          事件处理测试        </div>      </div>    );  }} export default Test;

执行顺序

React中的合成事件怎么实现

在子元素的原声事件里面,阻止了所有的冒泡。同时也阻止了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 (      <div        ref={this.parentRef}        onClick={this.handleParentBubble}        onClickCapture={this.handleParentCapture}      >        <div          ref={this.childRef}          onClick={this.handleChildBubble}          onClickCapture={this.handleChileCapture}        >          事件处理测试        </div>      </div>    );  }} export default Test;

执行顺序

React中的合成事件怎么实现

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

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

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

React中的合成事件怎么实现

关于“React中的合成事件怎么实现”这篇文章的内容就介绍到这里,感谢各位的阅读!相信大家对“React中的合成事件怎么实现”知识都有一定的了解,大家如果还想学习更多知识,欢迎关注编程网精选频道。

--结束END--

本文标题: React中的合成事件怎么实现

本文链接: https://lsjlt.com/news/349471.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • React中的合成事件怎么实现
    这篇文章主要介绍了React中的合成事件怎么实现的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇React中的合成事件怎么实现文章都会有所收获,下面我们一起来看看吧。1 事件三个阶段 捕获、目标、处理 (具体百度...
    99+
    2023-07-05
  • React如何实现合成事件
    本篇内容介绍了“React如何实现合成事件”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!事件绑定首先是 React 项目过程启动时,调用 l...
    99+
    2023-07-04
  • React实现合成事件的源码分析
    目录事件绑定事件触发结尾今天尝试学习 React 事件的源码实现。 React 版本为 18.2.0 React 中的事件,是对原生事件的封装,叫做合成事件。抽象出一层合成事件,是为...
    99+
    2022-12-08
    React实现合成事件 React合成事件
  • react的合成事件是什么
    本篇内容介绍了“react的合成事件是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!React合成事件是React模拟原生DOM事件所有...
    99+
    2023-07-04
  • React中合成事件的原理是什么
    本篇内容介绍了“React中合成事件的原理是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!事件介绍什么是事件事件是在编程时系统内发生的动...
    99+
    2023-07-05
  • React中的合成事件是什么原理
    目录事件介绍什么是事件React合成事件基础知识什么是合成事件为什么会有合成事件合成事件机制简述React合成事件实现原理事件注册React中模拟冒泡和捕获事件介绍 什么是事件 事件...
    99+
    2023-02-23
    React合成事件 React合成事件原理
  • React合成事件详解
    目录从点击输入框开始 扩展 点击输入框引起多个事件 为什么react中的input设置value后成为受控组件? 为什么合成事件属性有时无法访问? react如何模拟事件的阻止冒泡、...
    99+
    2024-04-02
  • React合成事件的原理是什么
    这篇文章主要讲解了“React合成事件的原理是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“React合成事件的原理是什么”吧!事件介绍什么是事件?事件是在编程时系统内发生的动作或者发生...
    99+
    2023-07-02
  • react中合成事件与原生事件的示例分析
    小编给大家分享一下react中合成事件与原生事件的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!1. 原生事件原生事件就是js的原生事件,如通过docum...
    99+
    2023-06-15
  • react的合成事件如何形容
    本教程操作环境:Windows7系统、react18版、Dell G3电脑。一、合成事件是什么React基于浏览器的事件机制自身实现了一套事件机制,包括事件注册、事件的合成、事件冒泡、事件派发等在React中这套事件机制被称之为合成事件合成...
    99+
    2023-05-14
    合成事件 React
  • React合成事件原理解析
    目录事件介绍什么是事件?举个栗子代码实现React合成事件基础知识什么是合成事件?在React中事件的写法和原生事件写法的区别?为什么会有合成事件?合成事件机制简述React合成事件...
    99+
    2024-04-02
  • 深入分析React源码中的合成事件
    目录热身准备明确几个概念事件系统角色划分事件注册registerSimpleEventsregisterEvents$2registerEvents$1registerEvents$...
    99+
    2022-11-13
    React源码合成事件 React 合成事件 React合成
  • react合成事件与原生事件的相关理解
    目录1. 原生事件 2. 合成事件 为什么react事件需要手动绑定this3. 原生与合成事件触发顺序4. 合成事件和原生事件混用 相关疑问:e.nativeEvent.stopP...
    99+
    2024-04-02
  • react要用合成事件的原因是什么
    本文小编为大家详细介绍“react要用合成事件的原因是什么”,内容详细,步骤清晰,细节处理妥当,希望这篇“react要用合成事件的原因是什么”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新...
    99+
    2024-04-02
  • react源码合成事件深入解析
    目录引言导火线事件委托合成事件特点React 事件系统事件注册enqueuePutListener()listenTo()trapCapturedEvent 与 trapBubble...
    99+
    2023-01-06
    react源码合成事件 react 合成事件
  • react modal 怎么实现关闭事件
    本教程操作环境:Windows10系统、react18版、Dell G3电脑。react modal 怎么实现关闭事件?react点击其他地方关闭Modal框原理:很简单,就是监听浏览器onclick事件的target,判断点击事件,如果不...
    99+
    2023-05-14
    React
  • react中事件处理与柯里化的实现
    目录1. 事件处理阻止默认行为合成事件2. 柯里化柯里化的目的一个简单的例子1. 事件处理 React 中元素也可接受、处理事件,但是在语法上有一点不同。 在React 中所有事件的...
    99+
    2024-04-02
  • React合成事件及TestUtilities在Facebook内部进行测试
    目录合成事件Test Utilitiesact()合成事件 boolean bubbles boolean cancelable DOMEventTarget currentTar...
    99+
    2022-12-23
    React合成Test Utilities测试 React Test Utilities
  • React中怎么实现条件渲染
    今天就跟大家聊聊有关React中怎么实现条件渲染,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。1. if-else我们可以将 if-else 条件逻...
    99+
    2024-04-02
  • react modal如何实现关闭事件
    今天小编给大家分享一下react modal如何实现关闭事件的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。react mod...
    99+
    2023-07-04
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作