React中如何实现组件间的通信?


一.父组件向子组件通讯

父组件

import React from 'react'
import Head from './Head'
export default function index() {
  return (
    <div>
      <Head title = "标题" />
    </div>
  )
}

子组件

import React from 'react'
export default function Head(props) {
  return (
    <div>
      这是{props.title}
    </div>
  )
}

二.子组件向父组件通讯

父组件

import React from 'react'
import Head from './Head'
export default function index() {
  function back(msg) {
    console.log(msg);

  }
  return (
    <div>
      <Head back={back.bind(this)} />
    </div>
  )
}

子组件

import React from 'react'

export default function Head(props) {
    function trigger() {
        console.log(props);
        props.back("子传父")
    }
    return (
        <div>
            <button onClick={trigger}>点击我</button>
        </div>
    )
}

三.跨层级通信

React 中使⽤ Context 实现祖代组件向后代组件跨层级传值。

详细介绍点击这里:React的context传值方法介绍

四.消息发布与订阅

1.安装

npm install pubsub-js
yarn add pubsub-js

2.引入

import pubsub from ‘pubsub-js’;

子组件发布

import React from 'react'
import pubsub from 'pubsub-js';
export default function Head() {
    function btnClick(){
        pubsub.publish('name', 'Hello world')//  publish 发布消息 消息名为:name 内容为:Hello world
    }   
    return (
        <div>
            <button onClick={btnClick}>点击我</button>
        </div>
    )
}

父组件订阅

import React, { useState, useEffect } from 'react'
import Head from './Head'
import pubsub from 'pubsub-js';
export default function index() {
  const [data, setData] = useState()
  useEffect(() => {
    // 订阅消息 消息名:name  第二个参数是一个函数
    // 此函数又有两个参数:消息名和消息数据,消息名不可以省略,可以是用_占位
    pubsub.subscribe("name", (_,res) => {
      setData(res)
    })
  }, []) //useEffect第二个参数写一个空数组,表示回调函数只会在第一次渲染页面后执行
  return (
    <div>
      {data}
      <Head></Head>
    </div>
  )
}

五.全局状态管理⼯具

可以借助 Redux 或 Mobx 等全局状态管理⼯具进⾏通信,它们会维护⼀个全局状态中⼼(Store),并可以根据不同的事件产⽣新的状态。

详细介绍点击这里:React中的redux的操作

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值