You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

React新手求助:ReactDom.render无输出,index.html应如何正确配置?

解决ReactDOM.render无输出及正确index.html结构问题

嘿,我来帮你搞定这个问题~ 你遇到的核心问题有两个:一是index.html缺少完整的HTML文档结构,二是你的index.js里监听了一个不存在的game事件,导致ReactDOM.render根本没执行。

一、正确的index.html结构

哪怕教程里看起来只有一个div,那也是简化展示,实际浏览器需要完整的HTML结构才能正确解析页面。这里给你两种常见的写法:

情况1:自己引入React/ReactDOM(非Create React App项目)

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>React Demo</title>
    <!-- 引入React和ReactDOM的开发版CDN资源 -->
    <script crossorigin src="https://unpkg.com/react@18/umd/react.development.js"></script>
    <script crossorigin src="https://unpkg.com/react-dom@18/umd/react-dom.development.js"></script>
</head>
<body>
    <!-- 你的目标挂载DOM元素 -->
    <div id="game"></div>
    <!-- 把JS文件放在body末尾,确保DOM元素先加载完成 -->
    <script src="./index.js"></script>
</body>
</html>

情况2:Create React App项目(你用npm start大概率是这个)

Create React App会自动处理HTML模板的打包注入,你只需要确保public/index.html里有目标div即可,完整结构参考:

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="utf-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1" />
    <title>React App</title>
  </head>
  <body>
    <noscript>You need to enable JavaScript to run this app.</noscript>
    <div id="game"></div>
    <!-- Create React App会自动注入打包后的JS,无需手动引入 -->
  </body>
</html>

二、修正你的index.js代码

你现在的代码监听了game事件,但这个事件从来没有被触发过,所以ReactDOM.render根本没执行,自然看不到输出。另外,React 18之后推荐用createRoot代替旧版的ReactDOM.render,这里给你两种适配写法:

写法1:监听DOM加载完成事件(通用所有版本)

// 等待整个DOM树加载完成后再执行渲染
document.addEventListener('DOMContentLoaded', function() {
  // React 17及之前版本写法
  ReactDOM.render("sss", document.getElementById('game'));
  
  // React 18+ 推荐写法
  // const root = ReactDOM.createRoot(document.getElementById('game'));
  // root.render("sss");
});

写法2:直接执行代码(适合JS放在body末尾的场景)

因为script放在body末尾时,前面的DOM元素已经加载完毕,所以可以直接写渲染逻辑:

// React 17及之前
ReactDOM.render("sss", document.getElementById('game'));

// React 18+
// const root = ReactDOM.createRoot(document.getElementById('game'));
// root.render("sss");

三、关键注意点

  • 永远确保JS代码在目标DOM元素之后加载,或者用DOMContentLoaded事件等待DOM就绪,这样就不会再出现"Target is not a DOM element"错误。
  • 不要监听自定义事件(比如game)除非你明确知道这个事件会被触发,否则代码永远不会执行。

内容的提问来源于stack exchange,提问作者user11315601

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.13 08:34:26