React.js兄弟组件的传值通信

在React中,完成兄弟组件之间的通信,要借助pubsub-js库

在vs code中,借助yarn进行下载安装

yarn add pubsub-js

在组件中通过以下语句进行引用

import PubSub from 'pubsub-js'

订阅消息用法

PubSub.subscribe('getData',(msg,stateObj)=>{
      console.log('A组件订阅消息了')
      console.log(stateObj)
      this.setState(stateObj)
    })

发布消息用法

PubSub.publish('getData',{name: 'chen',age: 23})

App.jsx

import React, { Component } from 'react'

// 组件引用
import PageA from './components/pageA'
import PageB from './components/pageB'

export default class App extends Component {

  render() {
    return (
      <div>
        <PageA/>
        <PageB/>
      </div>
    )
  }
}

PageA.jsx

import React, { Component } from 'react'
import PubSub from 'pubsub-js'
export default class PageA extends Component {

  state = {
    name: '',
    age: ''
  }

  componentDidMount(){
    PubSub.subscribe('getData',(msg,stateObj)=>{
      console.log('A组件订阅消息了')
      console.log(stateObj)
      this.setState(stateObj)
    })
  }
  render() {
    return (
      <div>
        <h2>我是pageA组件</h2>
        <div>以下是组件B发送的数据</div>
        <div>
          <p>name: {this.state.name}</p>
          <p>age: {this.state.age}</p>
        </div>
      </div>
    )
  }
}

PageB.jsx

import React, { Component } from 'react'
import PubSub from 'pubsub-js'

export default class PageB extends Component {

  sendData = ()=>{
    console.log('B组件发送消息了')
    PubSub.publish('getData',{name: 'chen',age: 23})
  }

  render() {
    return (
      <div>
        <h2>我是pageB组件</h2>
        <button onClick={this.sendData}>点击我发送数据到组件A</button>
      </div>
    )
  }
}

点击按钮后的效果: 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小灰灰学编程

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值