如何更新react18
更新React到18版本的步骤
检查当前React版本
运行以下命令查看当前项目使用的React版本:
npm list react
或
yarn list react
更新React和React DOM
使用npm或yarn安装最新版本的React 18:
npm install react@18 react-dom@18
或
yarn add react@18 react-dom@18
更新根节点渲染方法
React 18引入了新的根API(createRoot),替换之前的ReactDOM.render:
// 旧版本(React 17及以下)
import ReactDOM from 'react-dom';
ReactDOM.render(<App />, document.getElementById('root'));
// 新版本(React 18)
import { createRoot } from 'react-dom/client';
const root = createRoot(document.getElementById('root'));
root.render(<App />);
处理并发模式警告
React 18默认启用并发特性,若需暂时禁用,可使用LegacyRoot:
import { createRoot } from 'react-dom/client';
const root = createRoot(document.getElementById('root'), {
unstable_concurrentUpdatesByDefault: false
});
更新测试工具
若使用@testing-library/react,需升级至v13+以兼容React 18:
npm install @testing-library/react@13 --save-dev
常见问题解决
类型错误处理
TypeScript用户需更新@types/react和@types/react-dom:
npm install @types/react@18 @types/react-dom@18 --save-dev
第三方库兼容性
检查项目中使用的第三方库是否支持React 18。可通过库的官方文档或GitHub仓库确认。
严格模式警告
React 18的严格模式会故意双重调用某些生命周期方法,这是预期行为,用于检测副作用。
自动批处理
React 18会自动批处理更多状态更新,若需立即更新,可使用flushSync:
import { flushSync } from 'react-dom';
flushSync(() => {
setState(newValue);
});
卸载组件警告
使用新API卸载组件时需调用root.unmount():

const root = createRoot(container);
root.render(<App />);
// 卸载时
root.unmount();






