ReactJS:在基于 class 的消费者组件中访问 this.context 时出现问题

ReactJS: Problem accessing this.context in a class based consumer component

我在基于 class 的消费者组件中访问 this.context 时遇到问题。我有以下情况:

AppContext.js:

import React from "react";
const ContactContext = React.createContext();  // Create our context     
export default ContactContext;

DataProvider.js:

import React, { Fragment } from "react";
import AppContext from "./AppContext";

export default class DataProvider extends React.Component {
    state = {
        contacts: {
            contact1: { 
                id: 1,
                firstName: 'Test User FN',
                lastName: 'Test User LN'
            }
        }
    };
    render() {
        return (
            <>
            <AppContext.Provider value={{contacts: this.state.contacts}}>
                {this.props.children}       
            </AppContext.Provider>
            </>
        );
    }
}

App.js:

import React from 'react';

import DataProvider from "./DataProvider";
import Contact from './components/contact/contact.component';

export default class App extends React.Component {
  render() {
    return (
      <div>
        <div className="container">
          <DataProvider>
            <Contact contactIndex={0}/>
          </DataProvider>
        </div>
      </div>
    );
  }
}

消费者Contact.js:

import React, { Component } from "react";
import AppContext from '../context/AppContext'

export default class Contact extends Component {
    static contextType = AppContext;
    
    componentDidMount () {
        console.log('My context is: ' + this.context);
    }

    render() {
        return (
            <div className="card"></div>
        );
    }
}

控制台输出为: 我的上下文是:undefined

感谢您的帮助

问候 达基尔

你的代码对我来说似乎是正确的,我试图在沙盒中复制它以找出错误并且以某种方式工作得很好。

https://codesandbox.io/s/interesting-https-emgoz?file=/src/App.js

试图找出不同之处,但老实说我做不到。

我在其他答案的 CodeSandbox 中看到的唯一区别是导入路径不同。

import AppContext from "./AppContext";

对比: import AppContext from '../context/AppContext'

也许 OP 有 filepath/import 错误?

p.s。如果这是错误,TypeScript 是避免 JS 中此类事情的救星。