如何从反应上下文中获取数据 [英] How to get data from react context

查看:44
本文介绍了如何从反应上下文中获取数据的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个名为 GlobalDataProvider 的 React 类:

I have a React class called 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>
    )}
}

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

And I am trying to use data in another file "PageSection.js" like this:

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>
 );
};

但是由于某种原因这不起作用.我收到此错误消息:

However this does not work for some reason. I get this error message:

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

我做错了什么?

我是否必须导入类 DataProvider?还是只有 Context 变量?

Do I have to import the class DataProvider? or only the Context variable?

推荐答案

我怀疑您需要将 DataContext.Consumer 作为 DataContext.Provider 的子元素.像这样的……

I suspect you need your DataContext.Consumer to be a child element of the DataContext.Provider. Something like this...

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>
 );
};

这篇关于如何从反应上下文中获取数据的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆