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
相关产品推荐
相关产品推荐

