I am trying to create a UserContext to be accessible to all class components in the React app. I am receiving the following error.
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
}
That error seems to be caused by a circular dependency. What I did to solve that error was to create the Context outside the Provider file. Try to do this:
UserContext.js
import React from 'react';
export const UserContext = React.createContext();
LoginPage.js
static contextType = UserContext;
or
MasterLoginPage.contextType = UserContext;
not both.
The only thing you need to do is to import UserContext.js
Call the UserContext within the render block. Let me know if that works
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With