App组件如果要传递数据给 child 组件,有两种方式:
- 使用 props 一层一层组件向下传递
- 使用 Context 跨组件传递数据(比如:主题、语言等)
显然! 使用 Context 更加便利
使用步骤:
- 调用 React.createContext() 创建 Provider (提供数据)和 Consumer (消费数据)两个组件。
const { Provider, Consumer} = React.createContext()
- 使用 Provider 组件作为父节点。
<Provider>
<div className="App">
<Child1 />
</div>
</Provider>
- 设置 value 属性,表示要传递的数据
<Provider value = "pink">
- 调用 Consumer 组件接收数据
<Consumer>
{data => <span>data参数表示接收到的数据 -- {data}</span>}
</Consumer>
完整代码
// 创建context得到两个组件
const { Provider, Consumer } = React.createContext()
class App extends React.Component {
render() {
return (
<Provider value="pink">
<div className="app">
<Node />
</div>
</Provider>
)
}
}
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>
)
}