如何从反应上下文中获取数据

Sar*_* S. 3 javascript reactjs react-context

我有一个名为的 React 类GlobalDataProvider

import React, { Component } from 'react';

const DataContext = React.createContext();
export default DataContext;

export class DataProvider extends Component {

  state = {
     title: 'Some title'
  }

  render() {
   return (
     <DataContext.Provider 
       value={{state: this.state}}>
       {this.props.children}
     </DataContext.Provider>
    )}
}
Run Code Online (Sandbox Code Playgroud)

我正在尝试使用另一个文件“PageSection.js”中的数据,如下所示:

import React from 'react';
import DataContext from '../data/GlobalDataProvider';

const PageSection= () =>{

return (
    <section className="page-section">
        <DataContext.Consumer>
            {(context) => (
                <h1>{ context.state.title }</h1>
            )}
        </DataContext.Consumer>
    </section>
 );
};
Run Code Online (Sandbox Code Playgroud)

然而,由于某种原因,这不起作用。我收到此错误消息:

TypeError: Cannot read property 'state' of undefined, 
  in PageSection.js line 11 (the line with this code: { context.state.title }). 
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?

我必须导入 DataProvider 类吗?或者只有上下文变量?

Dou*_*urn 5

我怀疑您需要 DataContext.Consumer 作为 DataContext.Provider 的子元素。像这样的东西...

import React from 'react';
import DataContext, { DataProvider } from '../data/GlobalDataProvider';

const PageSection= () =>{

return (
    <section className="page-section">
      <DataProvider>
        <DataContext.Consumer>
            {(context) => (
                <h1>{ context.state.title }</h1>
            )}
        </DataContext.Consumer>
      </DataProvider>
    </section>
 );
};
Run Code Online (Sandbox Code Playgroud)