react组件之间的通信

1.父组件给子组件传值需要使用props

const Hello = props => {
	console.log(props)
	return(
		<div>
			<h1>props:{props.name}</h1>
		</div>
	)
}

const root = ReactDOM.createRoot(document.getElementById('root'));
root.render(
  <Hello name="jack" age={19}></Hello>
);
class App extends React.Component {
  
 render() {
     console.log(this.props)
	 return (
		<div>1</div>
	 )
   } 
}

props当中的值是只读属性的,不能进行修改
使用类组件时,如果写了构造函数,应该将props的值传递给super(),否则无法在构造函数中获取到props

class App extends React.Component {
  
  constructor(props) {
      super(props)
	  
	  console.log(this.props)
  }
  
 render() {
     console.log(this.props)
	 return (
		<div>1</div>
	 )
   } 
}

2.子组件需要通过事件的方式传值给父组件:

class App extends React.Component {
	state = {
		parentMsg:''
	}

	getChildMsg = data => {
		console.log('接收到子组件中传递过来的数据:',data)
		this.setState({
			parentMsg:data
		})
	}

	render(){
		return(
			<div className="parent">
				父组件:{this.state.parentMsg}
				<Child getMsg={this.getChildMsg}/>
			</div>
		)
	}
}

class Child extends React.Component{ 
state = {
	msg:'test'
}
handleClick = () => {
	this.props.getMsg(this.state.msg);
}

render(){
	return (
		<div className="child">
			子组件:<button onClick={this.handleClick}>点我,给父组件传递数据</button> 
		</div>
	)
}
}

在这里插入图片描述

3.兄弟组件通信:将共享状态提升到最近的公共父组件中,由公共父组件管理这个状态

const Child1 = (props) => {
  return <h1>计数器: {props.count}</h1>
}

const Child2 = (props) => {
  return <button onClick={() => { props.onIncrement() }}>+1</button>
}

class App extends React.Component {
  state = {
    count: 0
  }

  onIncrement = () => {
    this.setState({
      count: this.state.count + 1
    })
  }

  render() {
    return (
      <div>
        <Child1 count={this.state.count} />
        <Child2 onIncrement={this.onIncrement} />
      </div>
    )
  }

}

在这里插入图片描述

Provider,Consumer跨组件通信:

const { Provider,Consumer } = React.createContext()

const Node = props => {
	return (
		<div className="node">
			<SubNode/>
		</div>
	)
}

const SubNode = props => {
	return (
		<div className="subnode">
			<Child/>
		</div>
	)
}

const Child = props => {
	
	return <div className="child">
		<Consumer>
			{
				data => <span>我是子节点--{data}</span>
			}
		</Consumer>
	</div>
}

class App extends React.Component {
  

  render() {
    return (
		<Provider value="pink">
		  <div>
			<div className="app">
				<Node/>
			</div>
		  </div>
		</Provider>
    )
  }

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值