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

如何用Redux管理Material UI Drawer状态?点击事件无响应求助

修复Redux管理Drawer状态时onClick无响应的问题

我仔细看了你的代码,发现几个关键问题导致点击事件完全没响应,咱们一步步来修复:

1. Action Creator导入与映射错误

你在NavBar.js里导入的是toggleDrawer,但你的actions/creators.js里导出的action creator实际叫drawerToggled——这就导致你dispatch的是一个不存在的函数,Redux根本无法处理状态更新。

修复步骤:

  • 修改NavBar.js里的导入语句:
// 替换原来的import
import { drawerToggled } from '../../actions';
  • 更新mapDispatchToProps,确保正确映射action:
const mapDispatchToProps = (dispatch) => ({
  toggleDrawer: (open) => dispatch(drawerToggled(open)),
});

2. 事件处理函数被立即执行(而非点击触发)

这是React事件处理的常见误区:你现在的写法是onClick={toggleDrawer(true)},这会在组件渲染时就立刻执行函数,而不是等到点击的时候才触发。

修复所有事件绑定:
把所有直接调用函数的地方,改成传递箭头函数(保留函数引用):

  • 菜单按钮的点击事件:
<IconButton className={"menu"} aria-label="Menu" color="white" onClick={() => toggleDrawer(true)}>
  • Drawer的关闭事件:
<Drawer classes={{ paper: classes.paper }} open={drawerToggled} onClose={() => toggleDrawer(false)} >
  • 侧边栏的点击/按键事件:
<div className={classes.list} role="presentation" onClick={() => props.toggleDrawer(false)} onKeyDown={() => props.toggleDrawer(false)}>
  • Drawer内部容器的事件:
<div tabIndex={0} role="button" onClick={() => toggleDrawer(false)} onKeyDown={() => toggleDrawer(false)} className={{ root: classes.root }} >

3. useStyles钩子调用错误

你现在写的是const classes = useStyles;,但makeStyles返回的是一个React钩子函数,必须调用它才能拿到正确的样式对象:

const classes = useStyles();

做完这些修改后,点击菜单按钮应该就能正常触发Redux的action,更新drawerToggled状态,Drawer也能正常打开和关闭了——毕竟你之前用React本地状态是正常的,说明UI逻辑没问题,问题全在Redux的映射和事件绑定的细节上。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 20:47:54