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

React项目报错:TypeError: 无法读取undefined的'_updatedFibers'属性

React项目报错:TypeError: Cannot read properties of undefined (reading '_updatedFibers') 排查与解决

核心错误原因

  1. React与ReactDOM版本严重不匹配
    项目中react版本为^16.13.1,但react-dom版本却是^18.2.0,两者渲染逻辑差异极大:
    • ReactDOM.createRoot是React 18新增的并发渲染API,React 16根本不支持该方法,强行调用会导致React内部 Fiber 树状态异常,触发_updatedFibers未定义的错误。
  2. 依赖生态连锁不兼容
    • react-scripts@3.4.3是为React 16设计的构建工具,无法适配React 18的运行时逻辑;
    • notistack@1.0.0版本过旧,对React 18的支持不足,加上代码中用@ts-ignore隐藏了ref类型错误,可能导致组件引用获取异常,加剧渲染状态混乱。

解决方法

方案一:降级ReactDOM适配现有React 16生态(快速修复)

  1. 修改package.json中的依赖版本:
    {
      "dependencies": {
        "react-dom": "^16.13.1",
        "@types/react-dom": "^16.9.0"
      }
    }
    
  2. 替换index.ts中的渲染逻辑为React 16原生写法:
    import React from "react";
    import ReactDOM from "react-dom";
    import "reflect-metadata";
    import reportWebVitals from "./reportWebVitals";
    import "./index.css";
    import App from "./App";
    
    ReactDOM.render(
      <React.StrictMode>
        <App />
      </React.StrictMode>,
      document.getElementById("root") as HTMLElement
    );
    
    reportWebVitals();
    
  3. 清理并重装依赖:
    rm -rf node_modules package-lock.json
    npm install
    

方案二:升级整个React生态到18(长期维护推荐)

  1. 更新package.json中的核心依赖版本:
    {
      "dependencies": {
        "react": "^18.2.0",
        "react-dom": "^18.2.0",
        "@types/react": "^18.2.0",
        "@types/react-dom": "^18.2.0",
        "react-scripts": "^5.0.1",
        "notistack": "^3.0.1"
      }
    }
    
  2. 修正App.tsx中的notistack ref类型,移除@ts-ignore:
    import { SnackbarProvider, ProviderContext } from 'notistack';
    
    const App: React.FC<Props> = () => {
      const notistackRef = useRef<ProviderContext>(null);
      const onClickDismiss = (key: string | number) => () => {
        notistackRef.current?.closeSnackbar(key);
      };
    
      return (
        {/* ...其他组件 */}
        <SnackbarProvider
          autoHideDuration={5000}
          maxSnack={3}
          preventDuplicate
          ref={notistackRef}
          action={(key) => (
            <IconButton size="small" onClick={onClickDismiss(key)}>
              <CloseIcon htmlColor="#fff" />
            </IconButton>
          )}
        >
          {/* ...子组件 */}
        </SnackbarProvider>
        {/* ...其他组件 */}
      );
    };
    
  3. 优化index.ts的渲染逻辑(可选,添加StrictMode):
    root.render(
      <React.StrictMode>
        <App />
      </React.StrictMode>
    );
    
  4. 清理并重装依赖:
    rm -rf node_modules package-lock.json
    npm install
    

额外注意事项

  • 若选择升级到React 18,需检查@material-ui/core@4.x的兼容性,该版本对React 18的支持有限,可考虑升级到MUI v5,或安装@material-ui/core@4.12.4(该版本添加了React 18适配补丁);
  • 升级后可将tsconfig.json中的jsx配置改为react-jsx,适配React 18的自动JSX转换。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 00:24:56