1
import "./App.css";
import { createBrowserRouter, RouterProvider } from "react-router-dom";
import HomePage from "./pages/HomePage";
import ConfessionsPage from "./pages/ConfessionsPage";
import HelpPage from "./pages/HelpPage";
import { useContext, useState, useEffect } from "react";
import { VentifyContext } from "./context/VentifyContextProvider";

function App() {
  const publicRoutes = [
    {
      path: "/",
      element: <HomePage />,
    },
    {
      path: "/help",
      element: <HelpPage />,
    },
  ];

  const protectedRoutes = [
    ...publicRoutes,
    {
      path: "/confessions",
      element: <ConfessionsPage />,
    },
  ];

  const { userIsLoggedIn } = useContext(VentifyContext);

  const publicRouter = createBrowserRouter(publicRoutes);
  const protectedRouter = createBrowserRouter(protectedRoutes);

  const [router, setRouter] = useState(publicRouter);

  useEffect(() => {
    setRouter(userIsLoggedIn ? protectedRouter : publicRouter);
  }, [userIsLoggedIn]);

  return <RouterProvider router={router} />;
}

export default App;

it's not able to find protected routes when user logged in and userIsloggedIn value changes to true. ii'm using useEffect hook so that it render the logic again but still protected routes are not accessible.

Drew Reese
  • 165,259
  • 14
  • 153
  • 181
  • Don't protect routes by conditionally rendering them, they typically won't be mounted and rendered when you are trying to navigate to them upon auth changes. Unconditionally render them and conditionally redirect off them when auth conditions are not met. – Drew Reese Jul 25 '23 at 06:34

0 Answers0