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

React Material UI出现evaluating 'effect.next'报错如何解决

报错排查与修复方案

TypeError: undefined is not an object (evaluating 'effect.next')属于Material-UI Dialog组件过渡动画相关的内部队列执行异常,偶现触发的核心原因是Dialog被销毁时,内部未执行完的动画effect仍被调用,可按以下优先级排查修复:

  • 调整Dialog显隐控制逻辑:禁止用条件渲染直接挂载/销毁Dialog组件,必须通过组件自带的open属性控制显隐。
    错误写法:{showFlag && <Dialog open={true} {...otherProps} />}
    正确写法:<Dialog open={showFlag} {...otherProps} />
    条件渲染会在变量切换为false时直接销毁组件实例,如果此时Dialog的关闭动画还在执行,内部未走完的effect队列就会触发该报错。
  • 延迟执行销毁上下文的操作:如果关闭Dialog后需要立即跳转路由、销毁承载Dialog的上层组件,不要把逻辑直接写在onClose回调中,要放到Dialog的TransitionProps.onExited回调中执行,等Dialog关闭动画完全结束、内部资源清理完成后再执行上下文销毁操作,示例代码:
    <Dialog
      open={openState}
      onClose={() => setOpenState(false)}
      TransitionProps={{
        onExited: () => {
          // 此处放置路由跳转、上层组件状态修改等会销毁当前上下文的操作
        }
      }}
    >
      {/* 对话框内容 */}
    </Dialog>
    
  • 清理Dialog内部的自定义异步逻辑:检查Dialog内部的useEffect、定时器、接口请求、事件订阅等异步逻辑,必须在effect的清理函数中终止所有未完成的异步操作,避免组件销毁后异步回调执行访问已销毁的实例属性。
  • 升级Material-UI版本:如果你当前使用的是v5.0.0~v5.8.2范围内的MUI版本,该版本区间存在Dialog过渡动画effect队列的已知偶现bug,升级到v5.10.0及以上的稳定版本即可直接修复该问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 05:45:01