context可以用来做父组件向子组件或爷爷组件向孙子组件传参,
注意,数据流是单向的,子组件无法传给父组件
用法:
- 在父组件MyComponent组件中
const AContext = React.createContext(初始值)
function MyComponent(){
render (){
<AContext.provider value={this.state}> //可以传一个对象
<B></B>
</AContext.provider>
}
}
const AContext = React.createContext(初始值)
//这里的初始值类似于useState的初始值,可以传空值
<AContext.provider value={this.state}> //可以传一个对象
<B></B>
</AContext.provider>
- 这时如果B组件中又包含子组件C,可以不必指明需要往下传递的数据了,C将默认获取到
子组件B组件
function B(){
return(
<C></C>
);
}
- 指定contextType读取当前的context value,React将往上层找到最近的Provider
孙子组件C组件中
从父组件MyComponent组件中引入AContext
function C(){
static contextType = AContext;
render (){
return <Button theme={this.context}> //theme值即为父组件MyComponent组件中的this.state
}
}
相比props和state,React的Context可以实现跨层级的组件通信
https://zhuanlan.zhihu.com/p/110331535
https://zh-hans.reactjs.org/docs/context.html