React项目报错:TypeError: 无法读取undefined的'_updatedFibers'属性
React项目报错:TypeError: Cannot read properties of undefined (reading '_updatedFibers') 排查与解决
核心错误原因
- React与ReactDOM版本严重不匹配
项目中react版本为^16.13.1,但react-dom版本却是^18.2.0,两者渲染逻辑差异极大:ReactDOM.createRoot是React 18新增的并发渲染API,React 16根本不支持该方法,强行调用会导致React内部 Fiber 树状态异常,触发_updatedFibers未定义的错误。
- 依赖生态连锁不兼容
react-scripts@3.4.3是为React 16设计的构建工具,无法适配React 18的运行时逻辑;notistack@1.0.0版本过旧,对React 18的支持不足,加上代码中用@ts-ignore隐藏了ref类型错误,可能导致组件引用获取异常,加剧渲染状态混乱。
解决方法
方案一:降级ReactDOM适配现有React 16生态(快速修复)
- 修改
package.json中的依赖版本:{ "dependencies": { "react-dom": "^16.13.1", "@types/react-dom": "^16.9.0" } } - 替换
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(); - 清理并重装依赖:
rm -rf node_modules package-lock.json npm install
方案二:升级整个React生态到18(长期维护推荐)
- 更新
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" } } - 修正
App.tsx中的notistackref类型,移除@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> {/* ...其他组件 */} ); }; - 优化
index.ts的渲染逻辑(可选,添加StrictMode):root.render( <React.StrictMode> <App /> </React.StrictMode> ); - 清理并重装依赖:
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
相关产品推荐
相关产品推荐

