react里组件通信有几种方式,分别怎样进行通信?
- react组件间通信常见的几种情况:
- 父组件向子组件通信
- 子组件向父组件通信
- 跨级组件通信
- 非嵌套关系的组件通信
1.父组件向子组件通信:父组件通过props向子组件传递需要的信息
const Child = props => {
return <p> {props.name} </p>
}
const Parent=()=>{
return <Child name="zhufeng"></Child>
}
2.子组件向父组件通信:props+回调的方式
const Child=props=>{
const cb=msg=>{
return ()=>{
props.callback(msg)
}
}
return (
<button onClick={cb("你好世界")}>sunny</button>
)
}
class Parent extends Component{
callback(msg){
console.log(msg);
}
render(){
return <Child callback={this.callback.bind(this)}></Child>
}
}
3.跨级组件通信:即父组件向子组件的子组件通信,向更深子组件通信
const BatteryContext=createContext();
class GrandChild extends Component{
render(){
return(
<BatteryContext.Consumer>
{
color=><h1 style={{"color":color}}>红色的:{{color}}</h1>
}
</BatteryContext.Consumer>
)
}
}
const Child=()=>{
return(
<GrandChild/>
)
}
class Parent extends Component{
state={
color:'red'
}
render(){
const {color}=this.state
return(
<BatteryContext.Provider value={color}>
<Child></Child>
</BatteryContext.Provider>
)
}
}
4.非嵌套关系的组件通信:既没有任何包含关系的组件,包括兄弟组件以及不在同一个父级中的非兄弟组件
- 1)可以使用自定义事件通信(发布订阅模式)
- 2)可以通过redux等进行全局状态管理
- 3)如果是兄弟组件通信,可以找到这两个兄弟节点共同的父节点,结合父子间通信方式进行通信