I'm new at react and I want to show my admin dashboard privately whit Route but just first Route work and the other Route's component don't shown. this is my code:
<Routes>
<Route path="/admin" element={<PrivateLayout />}>
<Route path="/dashboard" exact element={<Dashboard />} />
</Route>
<Route exact path='/' element={<MainLayouts />}>
<Route path="/" element={<Course />} />
<Route path="/login" element={<Login />} />
<Route path="/register" element={<Register />} />
<Route path="/course/:id" element={<SingleCourse />} />
<Route path="/archive" element={<Archive />} />
<Route path="/logout" element={<Logout />} />
<Route path="*" element={<NotFound />} />
</Route>
</Routes>
by the mean just PrivateLayout in path of '/dashboard' and the MainLayouts in the path of '/' shown and login, register , ... dont shown in their own path.
and also MainLayouts codes are:
import React, { Fragment } from "react";
import Header from "./../common/headers";
import TopNav from "./../Navs/TopNav";
import MainNav from "./../Navs/MainNav";
import Footer from './../common/Footers';
import { useLocation } from 'react-router';
const MainLayouts = ({children}) => {
const location = useLocation()
return (
<Fragment>
<div className="landing-layer">
<div className="container">
<TopNav />
{location.pathname === "/" ? <Header /> : null}
</div>
</div>
<MainNav />
<main id="home-page">
<div className="container">{children}</div>
</main>
<Footer/>
</Fragment>
);
};
export default MainLayouts;
and PrivateLayout codes are:
import React from "react";
import { useSelector } from "react-redux";
import { Link } from "react-router-dom";
import Helmet from "react-helmet";
import AdminTopNav from "../admin/AdminTopNav";
import AdminSidebar from "../admin/AdminSidebar";
const PrivateLayout = ({ children }) => {
const user = useSelector((state) => state.user);
return (
<div id="wrapper">
<Helmet>
<title> dashboard </title>
</Helmet>
<nav
className="navbar navbar-inverse navbar-fixed-top"
role="navigation"
>
<div className="navbar-header">
<Link className="navbar-brand" to="/dashboard">
admin dashboard
</Link>
</div>
<AdminTopNav user={user} />
<AdminSidebar />
</nav>
<div id="page-wrapper">{children}</div>
</div>
);
};
export default PrivateLayout;