Navigate on React router dom v6 loop problem
From what I could see you had an issue with absolute linking. Converting to relative linking seems to resolve looping issue. Either approach should work, but without digging deeper into your configs here's what worked for me.
views/index.js - append the wildcard *
to the path so nested routes can be matched and rendered.
export const Views = (props) => {
const { token } = props;
return (
<>
<Routes>
<Route path={`${AUTH_PREFIX_PATH}/*`} element={<AuthLayout />} />
<Route
path="/*"
element={
<RouteInterceptor isAuthenticated={token} element={<AppLayout />} />
}
></Route>
</Routes>
</>
);
};
views/auth-views/index.js - Use relative routing, i.e. remove the AUTH_PREFIX_PATH
prefixing.
const Login = React.lazy(() => import("./login"));
export const AppViews = () => {
return (
<Suspense fallback={<p>Loading...</p>}>
<Routes>
<Route path={"login"} element={<Login />} />
<Route path="/*" element={<Navigate to="login" replace />} />
</Routes>
</Suspense>
);
};
Forked codesandbox from your github repo
Try this approach this works
const Login = React.lazy(() => import("./login"));
import {useNavigate} from "react-router-dom";
export const AppViews = () => {
const navigate = useNavigate();
const Navigator = () =>{
navigate(`${AUTH_PREFIX_PATH}/login`)
}
return (
<Suspense fallback={<p>Loading...</p>}>
<Routes>
<Route path={`${AUTH_PREFIX_PATH}/login`} element={<Login />} />
<Route
path="*"
element={<Navigator/>}
/>
</Routes>
</Suspense>
);
};
export default AppViews;