【发布时间】:2021-01-23 03:27:41
【问题描述】:
我正在尝试创建一个可供 React 应用程序中所有类组件访问的 UserContext。我收到以下错误。
ReferenceError: Cannot access 'UserContext' before initialization
App.js
import React, { createContext } from 'react';
export const UserContext = createContext(null);
function App() {
return (
<div className="App">
<UserContext.Provider value={null}>
<PageRoutes />
</UserContext.Provider>
</div>
);
}
export default App;
LoginPage.js
import React, { Component } from 'react';
import { UserContext } from './App';
class MasterLoginPage extends Component {
static contextType = UserContext;
constructor(props) {
super(props);
this.state = {
username: null,
loggedIn: false
}
// logic to work with username, password authentication
render() {
return (
<div>
// logic for rendering login page
{
this.state.loggedIn &&
<UserContext.Provider value={this.state.username} />
}
</div>
}
}
MasterLoginPage.contextType = UserContext;
export default MasterLoginPage;
PageRoutes.js
import React from 'react';
export default () => (
<BrowserRouter>
<Switch>
<Route exact path="/login" component={LoginPage} />
<Route exact path="/home" component={Home}/>
</Switch>
</BrowserRouter>
);
Home.js
import React from 'react';
export default class Home extends React.Component {
// I want to put this user in a state variable in this component
}
- 为什么我已经在 App.js 中定义了引用错误?
- 如果我必须将 userContext 值存储在其他类组件中的状态变量中,比如 Home.js,那么我该怎么做?
【问题讨论】:
-
这不是您访问上下文值的方式,您需要使用消费者,请阅读文档
-
这是第二部分。请您关注第一个问题。为什么会出现初始化错误?没有它,我将无法使用提供者和消费者。 @DennisVash
-
我认为它与您没有显示的代码有关,请参阅如何制作可重现的示例,最好制作沙箱,How to create a Minimal, Reproducible Example
-
即使在遵循文档之后,我也遇到了同样的问题。 reactjs.org/docs/context.html#classcontexttype
标签: javascript reactjs components react-props react-context