React 组件中实现事件代理

 更新时间:2024年01月28日 11:56:13   作者:&ACE&  
React的事件系统和浏览器事件系统相比,主要增加了两个特性:事件代理、和事件自动绑定,本文主要介绍了React 组件中实现事件代理,具有一定的参考价值,感兴趣的可以了解一下

React 并不会把所有的处理函数直接绑定在真实的节点上。而是把所有的事件绑定到结构的最外层,使用一个统一的事件监听器,这个事件监听器上维持了一个映射来保存所有组件内部的事件监听和处理函数。

当组件挂载或卸载时,只是在这个统一的事件监听器上插入或删除一些对象。

当事件发生时,首先被这个统一的事件监听器处理,然后在映射里找到真正的事件处理函数并调用。

这样做的优点是解决了兼容性问题,并且简化了事件处理和回收机制(不需要手动的解绑事件,React 已经在内部处理了)。但是有些事件 React 并没有实现,比如 window 的 resize 事件。

在React@17.0.3版本中:

  • 所有事件都是委托在id = root的DOM元素中(网上很多说是在document中,17版本不是了);
  • 在应用中所有节点的事件监听其实都是在id = root的DOM元素中触发;
  • React自身实现了一套事件冒泡捕获机制;
  • React实现了合成事件SyntheticEvent;
  • React在17版本不再使用事件池了(网上很多说使用了对象池来管理合成事件对象的创建销毁,那是16版本及之前);
  • 事件一旦在id = root的DOM元素中委托,其实是一直在触发的,只是没有绑定对应的回调函数;

在 React 组件中使用事件代理可以使用以下方法:

  • 使用 on 方法来绑定事件监听器:
class MyComponent extends React.Component {
  handleClick(event) {
    if (event.target.tagName === 'BUTTON') {
      console.log('Button clicked');
    }
  }

  render() {
    return (
      <div onClick={this.handleClick}>
        <button>Click me</button>
      </div>
    );
  }
}

在上述例子中,handleClick 方法被绑定到父级 div 元素的 onClick 事件上。当点击 button 元素时,事件会冒泡到父级 div 元素,从而触发 handleClick 方法。然后可以通过 event.target 来判断点击的元素是否是 button 元素。

  • 使用条件渲染来为不同的元素绑定不同的事件:
class MyComponent extends React.Component {
  handleClick(buttonType) {
    console.log(`${buttonType} clicked`);
  }

  render() {
    return (
      <div>
        <button onClick={() => this.handleClick('Button 1')}>Button 1</button>
        <button onClick={() => this.handleClick('Button 2')}>Button 2</button>
      </div>
    );
  }
}

在上述例子中,通过使用箭头函数,在每个 button 元素的 onClick 属性中调用不同的 handleClick 方法,并传递不同的参数。

这些方法都是使用了 React 的事件委托机制,利用事件冒泡原理来实现事件代理。这样可以减少事件监听器的数量,并且提高性能。

到此这篇关于React 组件中实现事件代理的文章就介绍到这了,更多相关React 事件代理内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 如何强制刷新react hooks组件

    如何强制刷新react hooks组件

    这篇文章主要介绍了如何强制刷新react hooks组件问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-11-11
  • React之关于Promise的用法

    React之关于Promise的用法

    这篇文章主要介绍了React之关于Promise的用法及说明,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-02-02
  • 一文理解Redux及其工作原理

    一文理解Redux及其工作原理

    这篇文章主要介绍了一文理解R通过围绕主题展开详细edux及其工作原理,文章通过主题展开详细的内容介绍,具有一定的参考价值,需要的小伙伴可以参考一下
    2022-09-09
  • react中实现修改input的defaultValue

    react中实现修改input的defaultValue

    这篇文章主要介绍了react中实现修改input的defaultValue方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-05-05
  • React使用Ant Design方式(简单使用)

    React使用Ant Design方式(简单使用)

    文章介绍了AntDesign组件库,它是基于AntDesign设计体系的ReactUI组件库,主要用于研发企业级中后台产品,文章详细讲解了如何下载和按需引入antd组件库,并通过一个小案例展示了如何使用antd进行布局和改造,最后,文章提醒大家在使用过程中可以参考官网的属性介绍
    2024-11-11
  • react-router-dom 降低版本的两种方法详解

    react-router-dom 降低版本的两种方法详解

    这篇文章主要介绍了react-router-dom 降低版本的两种方法,本篇文章就记录下如何降低 react-router-dom 为 v5 版本的两种方法,需要的朋友可以参考下
    2022-12-12
  • React报错信息之Expected an assignment or function call and instead saw an expression

    React报错信息之Expected an assignment or function call and 

    这篇文章主要介绍了React报错之Expected an assignment or function call and instead saw an expression,下面有两个示例来展示错误是如何产生的,需要的朋友可以参考下
    2022-08-08
  • 使用React手写一个对话框或模态框的方法示例

    使用React手写一个对话框或模态框的方法示例

    这篇文章主要介绍了使用React手写一个对话框或模态框的方法示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-04-04
  • react项目引入scss的方法

    react项目引入scss的方法

    这篇文章主要介绍了react项目引入scss的方法,本文给大家介绍了React pwa的配置方法,通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-04-04
  • React Native 中添加自定义字体的方法

    React Native 中添加自定义字体的方法

    这篇文章主要介绍了如何在 React Native 中添加自定义字体,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-08-08

最新评论