react18之 03 类组件与函数组件 之兄弟组件通讯

react18之 03 类组件与函数组件 之兄弟组件通讯

类组件

app.jsx 父组件

import React, { Component } from 'react';
import A from "./A";
import B from "./B";
export default class app extends Component {
 state = {
 }
 componentDidMount() {}
 render(){
   return (
     <div>
      app
      <A></A>
      <B></B>
     </div>
   )
 }
}

A.jsx 子组件

import PubSub from "pubsub-js";
import React, { Component } from 'react';
export default class A extends Component {
 state = {
 }
 componentDidMount() {}
 // 点击按钮的时候 向B组件传递 nameToBPramas 事件 再B组件的componentDidMount函数使用PubSub.subscribe接受
 nameToB = () =>{
  PubSub.publish('nameToBPramas',"我是a组件的name")
 }
 render(){
   return (
     <div>A
      <button onClick={this.nameToB}>B组件传递name</button>
     </div>
   )
 }
}

B.jsx 子组件

import PubSub from "pubsub-js";
import React, { Component } from 'react';
export default class B extends Component {
 state = {
  name:''
 }
 componentDidMount() {
  PubSub.subscribe('nameToBPramas',(msg,searchName)=>{
    console.log('msg',msg,'searchName',searchName);
    this.setState({
      name:searchName
    })
  })
 }
 render(){
  const { name } = this.state
   return (
     <div>B
      name - {name}
     </div>
   )
 }
}

效果

在这里插入图片描述

函数组件

app.jsx

import React, { Component } from 'react';
import A from "./A";
import B from "./B";
export default class app extends Component {
 state = {
 }
 componentDidMount() {}
 render(){
   return (
     <div>
      app
      <A></A>
      <B></B>
     </div>
   )
 }
}

A.jsx

import PubSub from "pubsub-js";
import React from 'react';
export default function A() {
    const changeName = () => {
      PubSub.publish('changeName',{
        name:'我是a组件的name'
      })
    }
    return (
        <div className='content'>
          A组件
          <button onClick={changeName}>changeName</button>
        </div>
    )
}

B.jsx

import PubSub from "pubsub-js";
import React, { useState } from 'react';
export default function B() {
    let [name, setCount] = useState('我是原始b组件的name')
    // 通过 PubSub.subscribe 接受 兄弟组件发布的 changeName方法 接受到数据
    PubSub.subscribe('changeName',(msg, searchName) => { // msg为事件名 searchName为传递的参数
      console.log('msg',msg,'searchName',searchName); // msg changeName searchName {name: '我是a组件的name'}
      setCount(searchName.name)
    })
    return (
        <div className='content'>
          B组件 {name}
        </div>
    )
}

效果

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值