You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

React MUI Drawer组件不显示求助:结合React Router使用异常

问题:React Router结合MUI Drawer时Dashboard页面Drawer不显示

我尝试结合React Router使用MUI的Drawer组件在页面左侧展示简易导航栏,代码编译正常,但Dashboard页面的Drawer组件不显示,Login和Signup页面正常。项目结构为Components目录下每个页面单独对应一个文件夹,App.js中配置路由指向各页面,Dashboard.js内集成Drawer等组件,我是React新手,不清楚问题出在哪里。

App.js 代码

import './App.css';

//Importing Components
import Login from "./Components/Login/Login.js";
import Signup from "./Components/SignUp/Signup.js";
import Dashboard from "./Components/Dashboard/Dashboard.js";

function App() {
  return (
    
    <BrowserRouter>
      <Routes>
        <Route
          path="/login"
          element={
            <div className="App">
              <Login/>
            </div>
              
          }  
        />
         <Route
          path="/dashboard"
          element={
            <div className="App">
              <Dashboard/>
            </div>
              
          }  
        />
         <Route
          path="/Signup"
          element={
            <div className="App">
            
            <Signup/>

            </div>
          }
        />
      </Routes>
    </BrowserRouter>
    
  );

}
export default App;

Dashboard.js 代码

import {Drawer, Box, Typography, IconButton} from "@mui/material";
import MenuIcon from "@mui/icons-material/Menu";
import {useState} from 'react';


const Dashboard = () => {
const [isDrawerOpen, setIsDrawerOpen] = useState(false)
    return (
        <>
        <IconButton 
        size = 'large' 
        edge = 'start' 
        color = 'inherit' 
        aria-label = 'logo' 
        onCLick = {() => setIsDrawerOpen(true)}
        >
        <MenuIcon/>
        </IconButton>
       
        <Drawer 
        anchor = 'left' 
        open = {isDrawerOpen} 
        onClose={() => setIsDrawerOpen(false)}>
           
            <Box 
            p={2} 
            width = '250px' 
            textAlign = 'center' 
            role= 'presentation'
            >
            
            <Typography 
            variant = 'h6' 
            component ='div'>

            </Typography>
            </Box>
        </Drawer>
        </>
    )

}
export default Dashboard;

问题原因及修复方案

1. 核心拼写错误

你在IconButton上把onClick事件拼写成了onCLick(字母C大写),这会导致点击菜单图标时无法触发setIsDrawerOpen(true),Drawer始终处于关闭状态(初始isDrawerOpen为false),所以看不到。

2. 额外优化:Drawer内容为空

当前Drawer里的Typography标签没有内容,即便修复了点击事件,打开Drawer后也看不到任何内容,建议添加测试文本。

修正后的Dashboard.js代码

import {Drawer, Box, Typography, IconButton} from "@mui/material";
import MenuIcon from "@mui/icons-material/Menu";
import {useState} from 'react';


const Dashboard = () => {
const [isDrawerOpen, setIsDrawerOpen] = useState(false)
    return (
        <>
        <IconButton 
        size='large' 
        edge='start' 
        color='inherit' 
        aria-label='logo' 
        onClick={() => setIsDrawerOpen(true)} // 修正拼写错误
        >
        <MenuIcon/>
        </IconButton>
       
        <Drawer 
        anchor='left' 
        open={isDrawerOpen} 
        onClose={() => setIsDrawerOpen(false)}>
           
            <Box 
            p={2} 
            width='250px' 
            textAlign='center' 
            role='presentation'
            >
            
            <Typography 
            variant='h6' 
            component='div'>
              导航菜单 {/* 添加可见文本 */}
            </Typography>
            </Box>
        </Drawer>
        </>
    )

}
export default Dashboard;

内容的提问来源于stack exchange,提问作者Eddy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 23:20:26