前端react 事件总线

2024-07-11 1248阅读

介绍

  事件总线(EventBus)是一种广泛用于软件架构中的设计模式,通常作为多个模块间的通信机制,它可以帮助组织和管理应用程序中不同组件之间的通信,以提高应用程序的可维护性、可扩展性和灵活性。

  事件总线模式应用了发布者/订阅者模式,不同的组件通过订阅和发布事件来进行通信。发布者发布一个事件,订阅者可以订阅该事件并在事件发生时执行相关的操作。事件总线充当了中介者的角色,它负责管理所有的事件和订阅者,并确保事件正确地传递到所有订阅者。

 

 在前端react/vue 等框架开发中,事件总线解决的问题:跨组件之间的事件传递

  以下以react举例

 

实现:

方法一:利用 node 的 api events

 1.创建 utils.js 作为事件总线
EventBus相当于一个全局的仓库,任何组件都可以去这个仓库里获取事件

它的工作原理是发布/订阅方法,通常称为 Pub/Sub 。

import EventEmitter from 'events';
const eventBus = new EventEmitter();
export default eventBus;

  2.使用

         使用事件总线总的来说分三步:发布事件、监听事件、移除事件         

        发布事件:eventBus.emit(“事件名称”, 参数列表);

         监听事件:eventBus.on(“事件名称”, 监听函数);

         移除事件:eventBus.off(“事件名称”, 监听函数);

3.实例代码

'use client';
import eventBus from '@/utils/eventBus';
import React, { useEffect } from 'react';
export default function Test() {
  return (
    
      
      
    
  );
}
function Child() {
  //监听函数
  function getListener(v1, v2) {
    console.log('接收到的数据', v1, v2);
  }
  useEffect(() => {
    // 监听事件:eventBus.on(“事件名称”, 监听函数);
    eventBus.on('eventBusName', (value1, value2) => getListener(value1, value2));
    return () => {
      // 记得不使用此组件的时候要关闭监听,避免再次进入的时候再次创建一个监听事件,如果如此往复多次,就会创建很多监听事件,这是一种灾难
      //移除事件:eventBus.off(“事件名称”, 监听函数);
      eventBus.off('eventBusName', () => getListener);
    };
  }, []);
  return ;
}
function Child2() {
  return (
     {
        //发出事件:eventBus.emit(“事件名称”, 参数列表);
        eventBus.emit('eventBusName', '来自【Child组件2】的数据1', '来自【Child组件2】的数据2');
      }}
    >
      【Child组件2】
    
  );
}

前端react 事件总线

前端react 事件总线

点击组件2 发布事件,并将组件2中的参数传递出去

组件1 通过 ‘eventBusName’ 时间名监听事件,组件2每点击一次(发布一次),组件2执行一次getListener方法

每监听执行一次getListener方法,需要通过eventBus.off(“事件名称”, 监听函数) 去移除监听

方法二:借助第三方库 events

  1.借助第三方库events,首先需要安装

npm install events 
yarn add events

2.使用

  用法和方法一类似,实现思路也是发布事件、监听事件、移除事件 三部曲,只不过写法有所不  同

         发布事件:eventBus.emit(“事件名称”, 参数列表);

         监听事件:eventBus.addListener(“事件名称”, 监听函数);

         移除事件:eventBus.removeListener(“事件名称”, 监听函数);

   然后接下来的步骤跟方法一一样,唯一区别在于监听事件,移除事件的写法有所不同

     详情可参考:React事件总线-CSDN博客

 

VPS购买请点击我

免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们,邮箱:ciyunidc@ciyunshuju.com。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!

目录[+]