周大胖子 发表于 2022-4-28 15:19:53

React17中利用 第三方events 实现跨组件通讯


import React from "react";
import EventEmitter from "events";

// 论如何使用 实现第三方组件通讯的events
// 1.安装evens      npm install events --save
// 2.导入events   import {EventEmitter} from 'events' ;
// 3.在全局建立事件对象 const eventBus = new EventEmitter();
// 4.eventBus.add('say',fn);添加或者叫注册事件事件名称,回调函数
// 5.eventBus.emitter('say',数据,数据,数据,数据 -----)触发事件,传递数据

const eventBus = new EventEmitter();

class A extends React.Component{
    constructor(){
      super();
      this.state={
            eat:'凉皮凉面'
      }
    }
    componentDidMount(){
      eventBus.addListener('say',this.fuA.bind(this));
    }

    // 注意点: 如果通过events 来实现跨组件传递数据,那么为了性能考虑 应当在组件被卸载时移除掉对应的事件
    componentWillUnmount(){
      eventBus.rawListeners('say',this.fuA.bind(this));
    }

    render(){
      return (
            <section>
                这是A模块{this.state.eat}
            </section>
      );
    }
    fuA(eat){
      this.setState({
            eat
      })
    }
}



class News extends React.Component{
    render(){
      return (
            <section>
                这是新闻模块
                <button onClick={()=>{
                  this.tnuv();
                }}>点击利用events通信</button>
                <A></A>
            </section>
      );
    }

    tnuv(){
      eventBus.emit('say','牛肉丸子')
    }
}



export default News;
页: [1]
查看完整版本: React17中利用 第三方events 实现跨组件通讯