react组件通信

博客围绕React组件通信展开,指出组件数据默认自身可用,要实现共享需进行组件通信。介绍了父传子、子传父、兄弟组件通信、跨组件通信等方式,还提及了children属性,给出了部分通信步骤示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

因为组件数据默认自身才能使用,要实现组件的数据共享,就需要组件通信

import { Component } from "react";

// 给函数组件通信
const Home= (props)=>{
    console.log(props);/////////////接收数据
    return <div>Home组件-</div>
}

class Home1 extends Component{
    render(){
        console.log(this.props);/////////////接收数据
        return (
            <div>Home1组件--</div>
        )
    }
}

export default class App extends Component{
    render(){
        return (
            <>
            <Home name='kki' age='18'></Home>
            <Home1 name='kki' age='18'></Home1>
            </>
        )
    }
}

父传子

import { Component } from "react";
class Parent extends Component{
    state={
        name:'yy',
        age:90
    }
    render(){
        const {name,age}=this.state
        return (
            <>
            <div>我是父组件</div>
            <Child name={name} age={age} hh={88}></Child>
            </>
        )
    }
}
class Child extends Component{
    render(){
        const {name,age,hh}=this.props
        return (
            <div>我是子组件--{name}--{age}--{hh}</div>
        )
    }
}
export default Parent

子传父

<Child barginP={this.bargin} key={item.id} {...item}></Child>//父
  bargin = (id, price) => {
   console.log(id)
   console.log(price)
  }//父
<button onClick={this.bargin}>关公大砍刀</button>//子
  bargin = () => {
    const { id, barginP } = this.props
    let barginPrice = +(Math.random() * 10).toFixed(2)
    barginP(id, barginPrice)
  }//子

兄弟组件通信

父传子(parent=>Rose)+子传父(Jack=>parent)

第一步:父传子

<Rose msg={this.state.msg}></Rose>
//rose组件
const Rose=(props)=>(
  <>
  <p>我是rose--{props.msg}</p>
  </>
)

第二步:子传父

//jack组件
const Jack=(props)=>(
  <>
  <p>我是jack</p>
  <button onClick={()=>props.changeMsg('小王子')}>点击切换</button>
  </>
)
  changeMsg=(p)=>{
    // console.log(p);
    this.setState({
      msg:p
    })
  }

跨组件通信

引入组件通信所需要的函数

import { createContext } from 'react'
const {Provider,Consumer} =createContext() 

用Provider包裹父组件,并传入值

<Provider value={this.state.msg}>
<Jack></Jack>
</Provider>

组件层级顺序App=>Jack=>Rose=>Prince

再Prince中接收数据

const Prince=()=>(
  <Consumer>
    {msg=><p>我是小王子---{msg}</p>}
  </Consumer>
)

children属性

// import { Component } from "react";

const Home = (props) => {
  // props.children('炸鸡')
  return (
    <>
      {/* <span>{props.children}</span> */}
      <span>{props.children('炸鸡')}</span>
      {/* <span></span> */}
    </>
  )
}

const Great = () => {
  return (
    <>
      {/* <Home>我是great</Home>
      <br />
      <Home>
        <span>我是span</span>
        <button>确定</button>
      </Home> */}
      <Home>
        {
          str=>'我在人民广场吃'+str
        }
      </Home>
      <Home>
        {
          str=>console.log('我在人民广场吃',str)
        }
      </Home>
    </>
  )
}

export default Great

React组件通信可以通过props属性进行传递数据。子组件可以通过props接收父组件传递的数据,并进行相应的操作。在函数式组件中,可以直接通过props对象来获取父组件传递的数据。在类组件中,需要使用this.props来获取父组件传递的数据。\[1\] 另外,子组件也可以通过调用父组件传递过来的函数来实现子传父的通信。子组件可以将需要传递的数据作为函数的实参传入,并在子组件内部调用该函数。这样就可以将子组件的数据传递给父组件进行处理。\[3\] 总结起来,React组件通信可以通过props属性进行父传子和子传父的数据传递和操作。父组件通过props将数据传递给子组件,子组件通过props接收父组件传递的数据。子组件可以通过调用父组件传递的函数来将子组件的数据传递给父组件进行处理。\[1\]\[3\] #### 引用[.reference_title] - *1* *3* [React组件通信](https://blog.csdn.net/weixin_52148548/article/details/125287315)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [react组件通信](https://blog.csdn.net/weixin_39818813/article/details/125737028)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值