修复 React 中 createRoot(...): Target container is not a DOM element 错误
出现错误“createRoot(...): Target container is not a DOM element”有多种原因:
将不正确的 id 传递给 document.getElementById() 方法。
将 React 脚本文件放在创建 div 元素的代码之上。
错误配置 webpack 的 index.html 文件。
下面是产生该错误的示例。
import {StrictMode} from'react';
import {createRoot} from'react-dom/client';
importAppfrom'./App';
// ????️ 给 getElementById() 方法传了一个错误的ID
const rootElement = document.getElementById('wrong-id');
const root = createRoot(rootElement);
root.render(
<StrictMode>
<App />
</StrictMode>,
);
我们向 getElementById 方法传递了一个错误的 ID,因此我们最终向导致错误的 createRoot() 方法传递了一个空值。
要解决“createRoot(...): Target container is not a DOM element”错误,请确保用于选择元素的 ID 与你在 index.html 文件中指定的 ID 相同,并将 React 脚本放在声明 div 元素的代码下方。
<!DOCTYPE html>
<htmllang="en">
<body>
<!-- 必须和 index.js 匹配 -->
<divid="root"></div>
</body>
</html>
示例中 index.html 文件中的 ID 是 root,因此我们在 index.js 中选择根元素时必须使用它。
import {StrictMode} from'react';
import {createRoot} from'react-dom/client';
importAppfrom'./App';
// ✅ correct ID passed
const rootElement = document.getElementById('root');
const root = createRoot(rootElement);
root.render(
<StrictMode>
<App />
</StrictMode>,
);
该错误的另一个常见原因是将 React.js 脚本文件放在 index.html 文件中创建 div 元素的代码之上。
<!DOCTYPE html>
<htmllang="en">
<body>
<!-- ⛔️ BAD: script runs before div is created -->
<scriptsrc="/bundle.js"></script>
<divid="root"></div>
</body>
</html>
bundle.js 脚本在创建导致错误的 div 元素之前运行。
相反,将我们的脚本标记放在声明 div 元素的代码下方。
<!DOCTYPE html>
<htmllang="en">
<body>
<divid="root"></div>
<!-- ✅ GOOD: div already exists -->
<scriptsrc="/bundle.js"></script>
</body>
</html>
该错误的另一个常见原因是使用 webpack 时 html-webpack-plugin 配置不正确。
使用 webpack 时,我们可以使用模板选项提供自定义 HTML 文件。 html-webpack-plugin 会自动将所有必要的 CSS、JS、manifest 和 favicon 文件注入到标记中。
首先更新 webpack 配置文件的 plugins 部分,提供自定义 html 文件的路径。
webpack.config.js
plugins: [
newHtmlWebpackPlugin({
title: "Your custom title",
template: './src/index.html'
})
],
并使用以下代码在您的 src 目录中创建一个 index.html 文件。
<!DOCTYPE html>
<html>
<head>
<metacharset="utf-8"/>
<title><%= htmlWebpackPlugin.options.title %></title>
</head>
<body>
<!-- ????️ must match the id in your index.js file -->
<divid="root"></div>
</body>
</html>
现在我们的 index.js 文件应该选择 ID 为 root 的元素。
import {StrictMode} from'react';
import {createRoot} from'react-dom/client';
importAppfrom'./App';
const rootElement = document.getElementById('root');
const root = createRoot(rootElement);
root.render(
<StrictMode>
<App />
</StrictMode>,
);
createRoot() 方法将根元素作为参数并创建一个 React 根。
根有一个 render() 方法,可用于将 React 元素渲染到 DOM 中。 React 中的根是指向 React 用来跟踪要渲染的树的顶级数据结构的指针。
本文转载自:迹忆客(https://www.jiyik.com)
以上是 修复 React 中 createRoot(...): Target container is not a DOM element 错误 的全部内容, 来源链接: utcz.com/z/290322.html