2

I've created a context named AuthContext in my react app.

export const AuthContext = createContext({
    isLoggedIn: false,
    login: (userid)=>{},
    logout: ()=>{}
})

And here's the code of my App.js file

function App() {
  let [isLoggedIn, setIsLoggedIn] = useState(false);

  const login = useCallback((id) => {
    setIsLoggedIn(true);
  }, []);
  const logout = useCallback(() => {
    setIsLoggedIn(false);
  }, []);

  let routes = (
    <Routes>
      <Route path="/signup" element={<Signup />} />
      <Route path="/login" element={<Login />} />
      <Route path="*" element={<Navigate to="/login" />}></Route>
    </Routes>
  );

  if (isLoggedIn) {
    routes = (
      <Routes>
        <Route path="/" element={<Dashboard />} />
        <Route path="/trends" element={<Trends />} />
        <Route path="/reports" element={<Reports />} />
        <Route path="/summary" element={<Summary />} />
        <Route path="/logout" element={<Logout />} />
        <Route path="*" element={<Navigate to="/dashboard" />}></Route>
      </Routes>
    );
  }

  return (
    <>
      <AuthContext.Provider
        value={{ isLoggedIn, login: login, logout: logout }}
      >
        <Router>
          <Navigator />
          {routes}
        </Router>
      </AuthContext.Provider>
    </>
  );
}

After login, I want to set the isLoggedIn state true. To do that, in my Login.js file, this is what I did:

export default function Login() {
  let loginURL = "******"
  const auth = useContext(AuthContext);

  const [lg] = useLogin();

  const handleLogin= async () => {
    const response = await lg.login(loginURL);
    console.log(response);
    auth.login(responsel.id) //defined in the App.js file. (Mentioned above)
  };

  return (
    <>
      <button
        type="button"
        onClick={handleLogin}
      >
        Login
      </button>
    </>
  );
}

I get the response properly in handleLogin function. After that, I call the auth.login function from the context to set the state isLoggedIn to true but then I get this warning:

Warning: Maximum update depth exceeded. This can happen when a component calls setState inside useEffect, but useEffect either doesn't have a dependency array, or one of the dependencies changes on every render.

And this happens infinitely and don't let any other things to load on the screen

Araf
  • 263
  • 1
  • 5
  • 19
  • Does this answer your question? [How to create a protected route?](https://stackoverflow.com/questions/66289122/how-to-create-a-protected-route) – Youssouf Oumar Jan 01 '23 at 12:26
  • @yousoumar no, I've figured out the problem. I'll post it as an answer later – Araf Jan 02 '23 at 05:22

0 Answers0