类组件

使用 createContext 创建 context

  1. const AppContext = createContext();
  2. const App = (props) => {
  3. return (
  4. <AppContext.Provider value="data">
  5. <Middle />
  6. </AppContext.Provider>
  7. )
  8. }
  9. const Middle = (props) => {
  10. return (
  11. <>
  12. <Foo />
  13. <Bar />
  14. <Baz />
  15. </>
  16. )
  17. }
  1. 使用 context.Consumer 以函数参数接收 provider 的 value,函数回调进行渲染

    1. class Foo extends Component {
    2. render() {
    3. return (
    4. <AppContext.Consumer>
    5. { value => <div>{value}</div> }
    6. </AppContext.Consumer>
    7. )
    8. }
    9. }
  2. 类组件也可以使用 contextType = 上下文对象

    1. class Bar extends Component {
    2. static contextType = AppContext;
    3. render() {
    4. const value = this.context;
    5. return (
    6. <div>{value}</div>
    7. )
    8. }
    9. }

    这两种方法都是基于类组件的 this 指向的实例

    函数组件

    useContext
    参数为 createContext 出来的 context 对象

    1. const Baz = (props) => {
    2. const value = useContext(AppContext);
    3. return (
    4. <div>{value}</div>
    5. )
    6. }