跳到主内容

创建新的react项目,控制台警报:Deprecation notice: ReactDOM.render is no longer supported in React 18

· 2分钟阅读

今天搭建新的 react 项目,控制台警报:Deprecation notice: ReactDOM.render is no longer supported in React 18

问题

复现步骤,通过 npx create-react-app my-app 创建新的应用

运行项目,控制台报警 🚔

Warning: ReactDOM.render is no longer supported in React 18. Use createRoot instead. Until you switch to the new API, your app will behave as if it's running React 17. Learn more: https://reactjs.org/link/switch-to-createroot

原因

react18 针对旧的 api 进行了调整,render 方法后面不会用。需要使用新的 api createRoot

除了 render 方法,还有一些全局方法也做了变更。

准备废弃的 API

  • react-dom: ReactDOM.render has been deprecated. Using it will warn and run your app in React 17 mode.
  • react-dom: ReactDOM.hydrate has been deprecated. Using it will warn and run your app in React 17 mode.
  • react-dom: ReactDOM.unmountComponentAtNode has been deprecated.
  • react-dom: ReactDOM.renderSubtreeIntoContainer has been deprecated.
  • react-dom/server: ReactDOMServer.renderToNodeStream has been deprecated.

解决

const root = ReactDOM.createRoot(document.getElementById("root"));
root.render(
<React.StrictMode>
<App />
</React.StrictMode>
);

如果使用 ts 来写的,可以这样

const root = ReactDOM.createRoot(document.getElementById("root") as HTMLElement);
root.render(
<React.StrictMode>
<App />
</React.StrictMode>
);