React中父子传参以及兄弟传参

React中父子传参以及兄弟传参

今天遇到了这个react中父子传参的问题,所以就来研究一下。话不多说,直奔主题!

父传子(通过props属性)

直接上代码!

父组件

import React from 'react';
import Children from './Children';
class Father extends React.Component{
    constructor(){
        super();

    }
    render(){
        return(
            <div>
                {/* 我们在这里引入子组件 并声明一个属性str  给他传一个hello */}
                <Children str='hello'></Children>
            </div>
        )
    }

}
export default Father;

子组件

import React from 'react';
class Children extends React.Component{
    constructor(){
        super()
    }

    render(){
        return(
            <div>
                {/* 子组件通过props 这个属性来接受父组件传过来的str */}
                {this.props.str}
            </div>
        )
    }

}
export default Children;

子传父(refs)

父组件

import React from 'react';
import Children from './Children';
class Father extends React.Component{
    constructor(){
        super();
		this.state={
		arr:[1,2,3]
		}
    }
    render(){
        return(
            <div>
                <Children text={this.state.arr} ref="son"></Children>
                <p>{this.refs.son.state.value}</p>
            </div>
        )
    }

}
export default Father;

子组件

import React from 'react';
class Children extends React.Component{
    constructor(){
        super();
        this.state={
        value:0
        }
    }

    render(){
        return(
            <div>
            	{this.props.arr}
                <input type="text" value=={this.state.value} onChange={(e)=>{this.setState(
                value:e.target.value
                )}
               }}/>
            </div>
        )
    }

}
export default Children;

使用ref的好处就是 父组件这边refs来得,孙子的值都可以 一直点下去!

子传父(回调函数)

父组件

class Father extends Component{
  constructor(props){
    super(props)
    this.state = {
      bgcolor:'pink'
    }
  }
  bgChange(color){
    this.setState({
      bgcolor:color
    })
  }
  render(props){
    <div style={{background:this.state.bgcolor}}>
            // 给子组件传递的值 color 
      <Children bgcolor={this.state.bgcolor} changeColor={(color)=>{this.bgChange(color)}} /> 
                        // changeColor 子组件的参数=color 当做形参
    </div>
  }
}

子组件

class Children extends Component{
  constructor(props){
    super(props);
  }
  handerClick(){
    this.props.changeColor('skyblue') // 执行父组件的changeColor 并传参 必须和父组件中的函数一模一样
  }
  render(){
    return(
      <div>
        <div>父组件的背景色{this.props.bgcolor}</div> // 子组件接收父组件传过来的值 bgcolor
        <button onClick={(e)=>{this.handerClick(e)}}>改变父组件背景</button> // 子组件执行函数
      </div>
    )
  }
}

兄弟传参(子传给父,父再传给另一个子)

子组件1

class Children1 extends Component{
  constructor(props){
    super(props);
  }
  handerClick(){
    this.props.changeChild2Color('skyblue') 
    // 改变兄弟组件的颜色 把changeChild2Color的参数传给父
  }
  render(){
    return(
      <div>
        <div>children1</div>
        <button onClick={(e)=>{this.handerClick(e)}}>改变children2背景</button>
      </div>
    )
  }
}

父组件

class Father extends Component{
  constructor(props){
    super(props)
    this.state = {
      child2bgcolor:'pink'
    }
  }
  onchild2bgChange(color){
    this.setState({
      child2bgcolor:color
    })
  }
  render(props){
    <div>
      <Children1 changeChild2Color={(color)=>{this.onchild2bgChange(color)}} />
      <Children2 bgcolor={this.state.child2bgcolor} />
    </div>
  }
}

子组件2

class Children2 extends Component{
  constructor(props){
    super(props);
  }
  render(){
    return(
      <div style={{background:this.props.bgcolor}}>
      // 从父元素获取自己的背景色
        <div>children2 背景色 {this.props.bgcolor}</div>
        // children2 背景色 skyblue
      </div>
    )
  }
}  
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

秃八哥

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

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

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

打赏作者

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

抵扣说明:

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

余额充值