您正在从不受支持的“react-dom”导入 createRoot
You are importing createRoot from ‘react-dom’ which is not supported
当我们createRoot
从react-dom
.
要解决该错误,请createRoot
从导入react-dom/client
。
以下是错误如何在 中发生的示例index.js
。
// ⛔️ Warning: You are importing createRoot from "react-dom" // which is not supported. You should instead // import it from "react-dom/client" import {StrictMode} from 'react'; import {createRoot} from 'react-dom'; // 👈️ wrong import path import App from './App'; const rootElement = document.getElementById('root'); const root = createRoot(rootElement); root.render( <StrictMode> <App /> </StrictMode>, );
解决createRoot
从导入错误react-dom/client
。
import {StrictMode} from 'react'; // ✅ now importing from react-dom/client import {createRoot} from 'react-dom/client'; import App from './App'; // 👇️ IMPORTANT: make sure to specify correct ID // must be the ID of the div element in your index.html file const rootElement = document.getElementById('root'); const root = createRoot(rootElement); root.render( <StrictMode> <App /> </StrictMode>, );
或者,您可以react-dom/client
作为对象导入并访问其属性。
// 👇️ For client createRoot or hydrateRoot import * as ReactDOMClient from 'react-dom/client'; // 👇️ For renderToPipeableStream or renderToReadableStream import * as ReactDOMServer from 'react-dom/server';
从版本 18 开始,该包的render()方法
react-dom
被视为遗留方法react-dom
。
该方法被替换为
从 导出的createRoot()react-dom/client
方法。
createRoot()
方法将根元素作为参数并创建一个 React 根。根有一个render()
方法可用于将 React 元素渲染到 DOM 中。React 中的根是指向顶级数据结构的指针,React 使用该指针来跟踪要渲染的树。
在新的 API 中,我们创建一个根,然后调用render()
它的方法。
如果您的应用程序在更新到 React 18 后无法运行,请检查它是否包装在<StrictMode>
.
严格模式
在 React 18 中发生了变化,并且比以前的版本有更多的检查。
使用严格模式时,您可能会注意到
console.log() 被打印两次。
删除严格模式包装器
如果删除严格模式可以修复您的应用程序,请在升级期间将其删除,并在解决了它指出的问题后将其添加回来(在顶部或应用程序的特定部分)。
消除警告的另一种解决方案是将react
和react-dom
软件包的版本恢复到旧版本,例如17.0.2
通过运行npm install react@17.0.2 react-dom@17.0.2
,但不建议这样做。
您可以在其Github 发布页面中阅读有关 React 18 中重大更改的更多信息
,但您很可能不会受到重大更改的影响,并且可以通过更新到 React 18 来利用更好的性能。
您还可以查看官方的
如何升级到 React 18 指南。
额外资源
您可以通过查看以下教程了解有关相关主题的更多信息: