目录
[跨组件通信Context API](#跨组件通信Context API)
[避免 props 层层传递:context](#避免 props 层层传递:context)
父子组件
父传子props
子传父:回调函数作为props的值传给子组件,形参接受数据
1、父组件提供一个回调函数 (其参数 用于接受数据 )
2、将函数作为属性的值 ,利用props ,传递给子组件
3、子组件通过props获取到父组件传递过来的西数,并旦地调用 这个函数。
4、将子组件中想要传递给父组件的数据,作为参数传递给这个函数。
javascript
//父组件
import Child from '../Child/index'
const Parent = () => {
const onClick = (value) => {
console.log('子组件传来了',value)
}
return(
<Child click={onClick} />
)
}
export default Parent
javascript
//子组件
const Child = (props) => {
const handleClick = (value) => {
props.click(value)
}
return(
<div onClick={()=>{handleClick(1)}}> </div>
)
}
export default Child
跨组件通信Context API
context.provider/consumer
Welcome传递给Title:
javascript
let MyContext = React.createContext();
class Welcome extends React.Component {
state = {
msg: 'welcome组件的数据'
}
render(){
return (
<div>
Hello Welcome
<MyContext.Provider value={this.state.msg}>
<Head />
</MyContext.Provider>
</div>
);
}
}
class Head extends React.Component {
render(){
return (
<div>
Hello Head
<Title />
</div>
);
}
}
class Title extends React.Component {
static contextType = MyContext
componentDidMount = () => {
console.log( this.context );
}
render(){
return (
<div>
Hello Title <MyContext.Consumer>{ value => value }</MyContext.Consumer>
</div>
);
}
}
let element = (
<Welcome />
);
通过<MyContext.
Provider>
组件携带value
属性进行向下传递的,
那么接收的语法是通过<MyContext.
Consumer>
组件。
也可以定义一个静态方法static contextType = MyContext
,这样就可以在逻辑中通过**this.context
**来拿到同样的值。