美文网首页
React事件总线

React事件总线

作者: 諾城 | 来源:发表于2020-07-29 17:06 被阅读0次

在React开发中如果有跨组件之间的事件传递,应该如何操作?
A、在Vue中我们可以通过Vue的实例,快速实现一个事件总线(EventBus),来完成操作;
B、在React中可以依赖一个使用较多的库 events 来完成对应的操作;

1、首先安装依赖库events:

$ yarn add events;

events常用的API:
创建EventEmitter对象:eventBus对象;
发出事件:eventBus.emit("事件名称", 参数列表);
监听事件:eventBus.addListener("事件名称", 监听函数);
移除事件:eventBus.removeListener("事件名称", 监听函数);

2、events实践:

首先新建一个文件QcEventEmitter.js,文件内容如下:

import { EventEmitter } from 'events'

class QcEventEmitter extends EventEmitter {};

export default new QcEventEmitter();

下面将实现EventTest组件向Person组件传递事件:
EventTest文件内容
A、EventTest组件中引入QcEventEmitter
B、在点击事件中通过QcEventEmitter.emit来发送事件

import React, { Component } from 'react';
import QcEventEmitter from 'common/utils/QcEventEmitter'

class EventTest extends Component {
  render() {
    return (
      <div>
        <button onClick={e => this.btnCLick()}>测试event事件</button>
      </div>
    );
  }

  btnCLick(){
    QcEventEmitter.emit('contextClick', 'Lucy', '99')
  }
}

export default EventTest;

Person文件内容
A、Person组件中引入QcEventEmitter,
B、在componentDidMount中通过QcEventEmitter.addListener来监听事件,
C、在 componentWillUnmount中通过QcEventEmitter.removeListener移除对事件的监听

import React, { Component, useContext } from 'react';
import QcEventEmitter from 'common/utils/QcEventEmitter'

class Person extends Component {

  componentDidMount(){
    QcEventEmitter.addListener("contextClick", this.headerClick)
  }
  componentWillUnmount() {
    QcEventEmitter.removeListener("contextClick", this.headerClick)
  }

  headerClick(name, age) {
    console.log(name, age);
  }

  render() {
    return (
      <div>
       <h2>这是Person子组件</h2>
      </div>
    );
  }
}

export default Person;

在App.js文件中渲染EventTest组件和Person组件(Person组件渲染后,就可以监听EventTest发出的事件了,他们之间并不需要任何依赖)

import React from 'react';
import ContetTest from './pages/contenxt'
import Person from 'pages/contenxt/person'

function App() {

  return (
    <div className="App">
      <ContetTest />
      <Person />
    </div>
  );
}

export default App;

相关文章

  • React事件总线

    在React开发中如果有跨组件之间的事件传递,应该如何操作?A、在Vue中我们可以通过Vue的实例,快速实现一个事...

  • RxJava实现事件总线(RxBus)学习笔记

    目录事件总线的介绍利用RxJava实现事件总线(Rxbus)Rxbus的使用 事件总线的介绍 1. 什么是事件总线...

  • 事件总线知多少(1)

    源码路径:Github-EventBus事件总线知多少(1)事件总线知多少(2) 1. 引言 事件总线这个概念对你...

  • 事件总线知多少(2)

    源码路径:Github-EventBus事件总线知多少(1)事件总线知多少(2) 1.引言 之前的一篇文章事件总线...

  • React 事件总线EventBus,实现全局事件响应

    如何将事件进行全局响应? 通过引入events 包进行全局事件响应 全局事件响应的好处 可处理深层次组件传值,以及...

  • 使用JavaScript手写一个事件总线功能

    事件总线 事件总线主要是实现一些任意的或非父子关系的组件之间的数据通信 实现一个事件总线功能需要: 事件派发 $...

  • 走马观花 - EventBus

    EventBus是Android的中央发布/订阅事件系统。 事件被post到总线,总线将事件传递给具有事件类型的匹...

  • [大白装逼]YEventBus事件总线的实现

    Y事件总线:基于java的Observe和Observable实现的事件总线github地址:https://gi...

  • 事件总线

    Android应用开发中,经常会涉及Activity,Fragment,Service等不同组件或者模块之间的消息...

  • 事件总线

    EventBus 3.0进阶:源码及其设计模式 完全解析 EvenBus3.0用法介绍 Eventbus Squa...

网友评论

      本文标题:React事件总线

      本文链接:https://www.haomeiwen.com/subject/ugqkrktx.html