1.引入context,并解构出来
import React, { Component } from 'react'
const NameContext = React.createContext()
const { Provider, Consumer } = NameContext
2.定义一个State
state = { username: 'tom', age: 18 }
3.将你需要传递给子孙组件的值用Provider包裹,现在这个value是一个公共值,都能拿到
return (
<div>
<h1>我是a组件</h1>
<h2>我的用户名是:{username}</h2>
<Provider value={{ username, age }}>
<B></B>
</Provider>
<hr />
</div>
)
}
4.在子孙组件声明后接收,使用static contextType = NameContext接收即可
class C extends Component {
static contextType = NameContext
render() {
console.log(this.context);
return (
<div>
<h1>我是c组件</h1>
<h2>我的用户名是:{this.context.age}</h2>
</div>
)
}
}
如果是函数式组件 那么使用Consumer
function C() {
return (
<div>
<h1>我是c组件</h1>
<h2>我的用户名是:
<Consumer>
{
value => {
return `${value.username}我今年${value.age}`
}
}
</Consumer>
</h2>
</div>
)
}
6.整体代码如下
import React, { Component } from 'react'
const NameContext = React.createContext()
const { Provider, Consumer } = NameContext
export default class Home extends Component {
state = { username: 'tom', age: 18 }
render() {
const { username, age } = this.state
return (
<div>
<h1>我是a组件</h1>
<h2>我的用户名是:{username}</h2>
<Provider value={{ username, age }}>
<B></B>
</Provider>
<hr />
</div>
)
}
}
class B extends Component {
render() {
return (
<div>
<h1>我是b组件</h1>
<h2>我的用户名是:</h2>
<C></C>
</div>
)
}
}
function C() {
return (
<div>
<h1>我是c组件</h1>
<h2>我的用户名是:
<Consumer>
{
value => {
return `${value.username}我今年${value.age}`
}
}
</Consumer>
</h2>
</div>
)
}