当前位置: 首页 > 面试题库 >

不变违规:_registerComponent(…):目标容器不是DOM元素

夏骞尧
2023-03-14
问题内容

在制作平凡的React示例页面后,我收到此错误:

未捕获的错误:始终违反:_registerComponent(…):目标容器不是DOM元素。

这是我的代码:

/** @jsx React.DOM */
'use strict';

var React = require('react');

var App = React.createClass({
  render() {
    return <h1>Yo</h1>;
  }
});

React.renderComponent(<App />, document.body);

HTML:

<html>
<head>
  <script src="/bundle.js"></script>
</head>
<body>
</body>
</html>

这是什么意思?


问题答案:

执行脚本时,documentelement尚不可用,因为script其本身位于中head。虽然这是一个有效的解决方案,以保持scripthead和渲染的DOMContentLoaded情况下,它甚至不如
把你script在最底层的body 渲染根组件到div之前它是这样的:

<html>
<head>
</head>
<body>
  <div id="root"></div>
  <script src="/bundle.js"></script>
</body>
</html>

并在中bundle.js致电:

React.render(<App />, document.getElementById('root'));

您应始终渲染为div而不是嵌套body否则,body当React不期望时,各种第三方代码(Google字体加载器,浏览器插件等)都可以修改DOM节点,并导致难以跟踪和调试的奇怪错误。阅读有关此问题的更多信息。

放在script底部的好处是,如果您将React Server渲染添加到项目中,则在脚本加载之前它不会阻止渲染。

更新:(2015年10月7日|

v0.14)

React.render已弃用,请ReactDOM.render 改用。

例:

import ReactDOM from 'react-dom';

ReactDOM.render(<App />, document.getElementById('root'));


 类似资料:
  • 我在生成一个简单的React示例页面后出现此错误: 未捕获错误:不变冲突:_registerComponent(…):目标容器不是DOM元素。 这是我的代码: HTML: 这是什么意思?

  • 问题内容: 我正在尝试在使用Webpack时使用Jest / Enzyme测试React组件。 我有一个非常简单的测试@ 它要拾取的相对组件是: 但是,运行会导致失败: 有错误@ 测试文件引用第4行,该行是的导入,导致失败。堆栈跟踪显示第14行是失败的原因-仅仅是来自的render调用,这是我从未遇到过的挑战(该应用程序可从我的Webpack设置正确渲染)。 对于那些感兴趣的人(Webpack代码

  • 问题内容: 我刚开始使用React,所以这可能是一个非常简单的错误,但是我们开始吧。我的html代码非常简单: 请注意,我在这里使用django的加载静态文件。我的JavaScript有点复杂,因此除非有人要求,否则我不会将其全部发布在这里,但是出现错误的行是这样的: 之后,我得到“目标容器不是DOM元素错误”,但似乎document.getElementById(“content”)几乎可以肯定

  • 问题内容: 当我尝试启动我的React Native应用程序时,我收到此消息。通常,这种格式可在其他多屏幕导航上使用,但在这种情况下不起作用。 这是错误: 这是我的应用格式: 问题答案: React Navigation 3.0进行了许多重大更改,包括根导航器所需的显式应用程序容器。 过去,任何导航器都可以充当应用程序顶层的导航容器,因为它们都包裹在“导航容器”中。导航容器(现在称为应用程序容器)

  • react_devtools_backend。js:2273不变违规:缩小反应错误#152;参观http://reactjs.org/docs/error-decoder.html?invariant=152 当我在本地运行项目时不会出现此问题,但在AWS服务器上部署代码后,可以在控制台中看到此问题。 请帮助,还有一件事如何在本地调试此问题?