使侧边栏可用于所有组件 |反应 JS |反应路由器 v6

2023-11-26

我正在使用 React router dom v6,并且想要实现一个逻辑,其中侧边栏将在 my.xml 中的所有组件中可用。目前,每当我尝试单击侧边栏中的任何内容时,侧边栏都会消失。 我想在我的应用程序中的所有组件中保留侧边栏。

侧边栏可用

侧边栏不见了

Index.js

    import React from 'react';
    import ReactDOM from 'react-dom';
    import './index.css';
    import App from './App';

    import {BrowserRouter as Router,    Routes, Route,Navigate,Link} from
   'react-router-dom'; import Login from
   '../src/components/Login/LoginPage'; import Test from
   '../src/components/test/Test'; import Homepage from
   '../src/components/homepage/HomePage'; import Scheduler from
   '../src/components/scheduler/Scheduler'; import Classroom from
   '../src/components/classroom/Classroom'; import Assignment from
   '../src/components/assignment/Assignment'; import Meeting from
   '../src/components/meetings/Meetings'; import ReportCard from
   '../src/components/reportcard/ReportCard'; import SideMenuBar from
   '../src/components/sidemenubar/SideMenuBar'; ReactDOM.render(

    <Router>
      <Routes>
        <Route path='/' element={<Login />} />
        <Route path='/api/v1/testpath' element={<Test />} />
        {/* Sidebar Routes */}
        <Route path="/api/v1/app/userHome" exact element={<Test />} />
        <Route path="/api/v1/app/schedule" exact element={<Scheduler />} />
        <Route path="/api/v1/app/myclassroom" exact element={<Classroom />} />
        <Route
          path="/api/v1/app/myassignments"
          exact
          element={<Assignment />}
        />
        <Route path="/api/v1/app/mymeetings" exact element={<Meeting />} />
        <Route path="/api/v1/app/viewreports" exact element={<ReportCard />} />
      </Routes>
    </Router>,


  document.getElementById('root')
);

侧边栏.js

import {
  ListItemIcon,
  ListItemText,
  List,
  Divider,
  Drawer,
  Avatar,
  Box,
  ListItemButton,
} from "@mui/material";
import { makeStyles } from "@mui/styles";

import HomeIcon from "@mui/icons-material/Home";
import WatchLaterIcon from "@mui/icons-material/WatchLater";
import GroupsIcon from "@mui/icons-material/Groups";
import AssignmentOutlinedIcon from "@mui/icons-material/AssignmentOutlined";
import AssessmentOutlinedIcon from "@mui/icons-material/AssessmentOutlined";
import LogoutOutlinedIcon from "@mui/icons-material/LogoutOutlined";
import MeetingRoomOutlinedIcon from "@mui/icons-material/MeetingRoomOutlined";

import Logo from "./logo.png";

import { BrowserRouter as Router, Route, Link, Routes } from "react-router-dom";
import Homepage from "../homepage/HomePage";
import Scheduler from "../scheduler/Scheduler";
import Classroom from "../classroom/Classroom";
import Assignment from "../assignment/Assignment";
import ReportCard from "../reportcard/ReportCard";
import Meeting from "../meetings/Meetings";
const drawerWidth = 350;
const useStyles = makeStyles({
  page: {
    background: "#f9f9f9",
    width: "100%",
  },
  root: {
    display: "flex",
  },
  drawer: {
    width: drawerWidth,
  },
  drawerPaper: {
    width: drawerWidth,
    borderRadius: "2%",
  },
  listitem: {
    "&:hover": {
      fontWeight: "fontWeightBold",
      background: "#f9f9f9",
    },
  },
  navlink: {
    textDecoration: "inherit",
    color: "inherit",
  },
});

export default function Sidemenubar() {
  const classes = useStyles();

  return (
    <Box sx={{ display: "flex" }}>
      <Divider />

      <Drawer
        className={classes.drawer}
        variant="permanent"
        classes={{ paper: classes.drawerPaper }}
        anchor="left"
      >
        {/*App Logo */}
        <Avatar
          src={Logo}
          alt="404"
          sx={{ width: 100, height: 100, alignSelf: "center", margin: 1 }}
        />
        {/*Menu Items */}

        <List component="nav">
          <Link to="/api/v1/app/userHome" className={classes.navlink}>
            <ListItemButton
              sx={{
                "&:hover": {
                  fontWeight: "bold",
                  boxShadow: 1,
                  background: "#6D62DA",
                },
              }}
            >
              <ListItemIcon>
                <HomeIcon />
              </ListItemIcon>
              <ListItemText primary="Home" />
            </ListItemButton>
          </Link>
          <Divider />
          <Link to="/api/v1/app/schedule" className={classes.navlink}>
            <ListItemButton
              sx={{
                "&:hover": {
                  fontWeight: "bold",
                  boxShadow: 1,
                  background: "#6D62DA",
                },
              }}
            >
              <ListItemIcon>
                <WatchLaterIcon />
              </ListItemIcon>
              <ListItemText primary="Scheduler" />
            </ListItemButton>
          </Link>
          <Divider />
        </List>
      </Drawer>
      <Routes>
      <Route path='/api/v1/app/userHome' element={<Homepage />}></Route>
        <Route path='/api/v1/app/schedule' element={<Scheduler />}></Route>
      </Routes>
    </Box>
  );
}

主页.js

import React from 'react';
import { Grid } from "@mui/material";
import SideMenuBar from '../sidemenubar/SideMenuBar';
import HomePage from '../homepage/HomePage';
import Scheduler from '../scheduler/Scheduler';
import {BrowserRouter as Router, 
    Routes, Route,Navigate,Link} from 'react-router-dom';
class Test extends React.Component{
    render(){
        return (
            <Grid container>
                <Grid item md={4}>
                    <SideMenuBar />
                </Grid>
                
                <Grid item md={8}>
                    <HomePage />
                </Grid>
                
            </Grid>
        )
    }
}

export default Test;

如果您想在每个路线/页面上呈现侧边栏,那么我建议:

使用布局包装组件和插座

创建一个布局容器组件来呈现Sidebar组件和一个Outlet进入各自的网格列。渲染嵌套在布局中的页面路由。

import { Outlet } from 'react-router-dom';
import SideMenuBar from '../sidemenubar/SideMenuBar';

const PageLayout = () => (
  <Grid container>
    <Grid item md={4}>
      <SideMenuBar />
    </Grid>    
    <Grid item md={8}>
      <Outlet /> // <-- nested routes rendered here
    </Grid>     
  </Grid>
);

index.js

<Router>
  <Routes>
    <Route path="/" element={<PageLayout />} >
      <Route index element={<Login />} />
      <Route path="/api/v1/app/userHome" element={<UserHome />} />
      <Route path="/api/v1/app/schedule" element={<Scheduler />} />
      <Route path="/api/v1/app/myclassroom" element={<Classroom />} />
      <Route
        path="/api/v1/app/myassignments"
        element={<Assignment />}
      />
      <Route path="/api/v1/app/mymeetings" element={<Meeting />} />
      <Route path="/api/v1/app/viewreports" element={<ReportCard />} />
    </Route>
  </Routes>
</Router>

使用包装组件和children Prop

另一种选择是让PageLayout组件渲染它的children相反,并包裹Routes成分。

const PageLayout = ({ children }) => (
  <Grid container>
    <Grid item md={4}>
      <SideMenuBar />
    </Grid>    
    <Grid item md={8}>
      {children}
    </Grid>     
  </Grid>
);

index.js

<Router>
  <PageLayout>
    <Routes>
      <Route path="/ element={<Login />} />
      <Route path="/api/v1/app/userHome" element={<UserHome />} />
      <Route path="/api/v1/app/schedule" element={<Scheduler />} />
      <Route path="/api/v1/app/myclassroom" element={<Classroom />} />
      <Route
        path="/api/v1/app/myassignments"
        element={<Assignment />}
      />
      <Route path="/api/v1/app/mymeetings" element={<Meeting />} />
      <Route path="/api/v1/app/viewreports" element={<ReportCard />} />
    </Routes>
  </PageLayout>
</Router>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使侧边栏可用于所有组件 |反应 JS |反应路由器 v6 的相关文章

随机推荐

  • 从流中读取 XML

    我正在使用 ASP NET 并从表单导入 XML 文件 现在我将其转换为Stream Stream inputStream XmlFileUploadControl PostedFile InputStream 因为我以后可能需要这个版本
  • OSX 上 JVM 的 Zombie http.proxyHost 设置

    我最近更改了网络 并从 OSX Leopard 上的系统偏好设置 网络面板中删除了所有 HTTP 代理设置 然而 现在每当我使用 Eclipse 时 Java HTTP 代理系统属性似乎都会 自动 设置为使用我现在已失效的 HTTP 代理
  • 如何在CSS中使图像悬停?

    我想在悬停时将图像从正常更改为更亮 我的代码 div class nkhome a href Home html img src Images btnhome png a div nkhome margin left 260px top 1
  • 关于Spring框架应用中Beans.xml配置文件的使用

    我正在学习Spring MVC 今天 试图了解如何实现 JDBC DAO 我在 Spring Spring 而不是 Spring MVC 中找到了这个 Hello World 并且我开始看到它 因为我认为要实现 DAO 我必须创建一个单独的
  • 如何管理docker中的临时文件?

    我正在运行一个 Java 应用程序 它以给定格式读取一些数据并在临时目录中写入 CSV 文件 该文件完全写入后 数据将批量加载到数据库中 加载完成后 该文件将立即删除 不应共享此文件 现在 我想在 docker 容器中运行该应用程序的 ja
  • 有没有办法在 Android 设备上安全地存储用户数据?

    我正在编写一个应用程序 用户有时会通过它下订单 我想让用户可以选择保存他们的账单信息 姓名 地址等 以便以后如果他们想再次下订单时可以快速恢复 用户将输入密码以保护数据 显然 我不能只是将其作为文件放在设备上 因为任何人都可以 root 查
  • 在 BigQuery 中包含带有 ANY_VALUE 的空值

    我有一个 供应商 表 看起来像这样 company itemKey itemPriceA itemPriceB companyA 203913 20 10 companyA 203914 20 20 companyA 203915 25 5
  • 首先将列添加到带有数据库的 aspnetusers

    我找到了许多通过数据库迁移向身份表添加列 我已成功移至应用程序数据库 的教程 但我的理解是这不适用于数据库拳头项目 那么 如何将列添加到数据库第一个项目中的 aspnetusers 表中 我想添加一个名为 Is RegComplete 的位
  • PHP 函数使用外部变量

    function parts part structure http site url content echo tructure part php 这个函数使用了一个变量 site url这是在本页顶部定义的 但该变量未传递到函数中 我们
  • 如何使用 iframe 进行异步(AJAX)文件上传?

    我正在尝试使用ajax上传文件 我读到如果不使用就不可能做到这一点iframe 我写
  • 分解 C++ 代码大小

    我正在为旧博客文章中的第一个问题寻找一个很好的 Stack Overflow 风格答案C 代码大小 我将在下面重复 我真的很想要一些工具 最好是基于 g 来显示编译 链接代码的哪些部分是从 C 源代码的哪些部分生成的 例如 查看是否正在为数
  • 如何生成随机数,每个随机数与所有其他元素的差异至少为 x?

    我知道这违背了随机数的定义 但我的项目仍然需要这个 例如 我想生成一个包含 5 个随机元素的数组range 0 200 现在 我希望每个元素之间至少有 15 的差异 所以随机数组应该看起来像这样 15 45 99 132 199 我可以使用
  • 使用 Javascript 将 HTML 的 DocType 作为字符串获取

    我知道我可以通过访问 doctype 对象document doctype or document childNodes 0 但我的问题是将 doctype 作为字符串获取 我可以通过调用在 chrome 和 safari 中执行此操作do
  • 如何使用 Spring Boot 配置嵌入式 ActiveMQ Broker URL

    我遵循了一个使用 Spring Boot 版本 1 4 X 设置和运行嵌入式 ActiveMQ 的简单示例 这是示例的链接https spring io guides gs messaging jms 我的课程结构如下 SpringBoot
  • 为什么在 Python 中修改父框架仅适用于模块框架?

    我正在玩inspect stack 我尝试修改父框架的局部变量 它似乎仅在父框架是模块级时才有效 以下代码显示了这一点 Python 2 7 import inspect def outer a 10 print a modify prin
  • C# 自动关闭消息框

    我目前正在用 C 开发一个应用程序 在其中显示 MessageBox 如何在几秒钟后自动关闭消息框 您将需要创建自己的窗口 其隐藏代码包含加载的处理程序和计时器处理程序 如下所示 private void Window Loaded obj
  • 在 iOS 中将图像保存到 SQLite 以及从 SQLite 检索图像

    我正在尝试将图像保存到 Sqlite 然后将图像加载到 UIImageView 但它没有得到工作 我不知道出了什么问题 这是我正在使用的代码 谁能帮我解决这个问题 void saveImage sqlite3 stmt compiledSt
  • 如何在java 8中使用CompletableFuture启动异步任务并让主线程完成并退出

    我有以下代码 或多或少 ExecutorService executor Executors newFixedThreadPool 10 CompletableFuture supplyAsync gt return longRunning
  • 如何用JS选择某种类型的下一个兄弟?

    我有一些 html h4 title h4 p paragraph p p paragraph p some number of paragraphs a href class link link a 我有 h4 与 JavaScript
  • 使侧边栏可用于所有组件 |反应 JS |反应路由器 v6

    我正在使用 React router dom v6 并且想要实现一个逻辑 其中侧边栏将在 my xml 中的所有组件中可用 目前 每当我尝试单击侧边栏中的任何内容时 侧边栏都会消失 我想在我的应用程序中的所有组件中保留侧边栏 侧边栏可用 侧