react 任意组件组件通讯包 pubsub-js

在 react 中,组件机之间的通信包括父向子、子向父、兄弟间,父向子通过 props 传递数据。子向父通过 props 传递一个事件,在合适的时机调用。兄弟之间通信可以借助共同的父组件,传递方把数据传给父组件,然后父组件再把数据传给接收方,这样操作起来就会比较繁琐。所以可以借助第三方包来进行兄弟组件之间的通信。

pubsub-js 包

GitHub 官网:https://github.com/mroderick/PubSubJS#readme
npm 官网:https://www.npmjs.com/package/pubsub-js

下载

npm install pubsub-js

使用

import PubSub from 'pubsub-js';

PubSub.publish('消息标识', 消息内容) // 发布消息
var token = PubSub.subscribe('消息标识', (msg, data) => {}) // 订阅消息,回调里面的参数,msg 是消息标识,data 是消息内容
PubSub.unsubscribe(token) // 取消订阅
...

例子:
传输方

import React,{Component} from 'react'
import './index.css'
import PubSub from 'pubsub-js'

class Demo1 extends Component {
  state = {
    msg: 'hello, react'
  }
  handlerClick = () => {
    PubSub.publish('message', this.state.msg)
  }
  render() {
    return (
      <div className="demo1">
        <h2>我是 demo1 组件</h2>
        <button onClick={this.handlerClick}>给Demo2组件传数据</button>
      </div>
    )
  }
}

export default Demo1

接收方

import React,{Component} from 'react'
import './index.css'
import PubSub from 'pubsub-js'

class Demo2 extends Component {
  state = {
    msg: ''
  }
  componentDidMount() {
    this.token = PubSub.subscribe('message', (_, data) => {
      console.log(data);
      this.setState({
        msg: data
      })
    })
  }
  // 组件销毁之前,关闭订阅消息,否则会报错
  componentWillUnmount() {
    PubSub.unsubscribe(this.token)
  }
  render() {
    return (
      <div className="demo2">
        <h2>我是 demo2 组件</h2>
        <span>{this.state.msg}</span>
      </div>
    )
  }
}

export default Demo2

两个组件需要在 App.js 中挂载即可

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值