ReactJs 0.12目标容器不是DOM元素

See*_*uth 3 javascript reactjs

我很困惑为什么我在控制台中收到此错误.我已经阅读了所有的dos,据我所知,我正在做这件事.

在我的页面上,我有一个

<div id="aisis-writer"></div>
Run Code Online (Sandbox Code Playgroud)

我希望我的反应元素绑定在哪里.然后我创建了一个简单的React组件,它什么都不呈现:

var AisisWriter = React.createClass({
  getInitialState: function(){},

  componentDidMount: function(){},

  render: function(){
    return null;
  }
});

React.render(
  <AisisWriter />,
  document.getElementById('aisis-writer')
);
Run Code Online (Sandbox Code Playgroud)

非常基本的.当我加载页面时,我看到:Uncaught Error: Invariant Violation: _registerComponent(...): Target container is not a DOM element.所以我想,好吧也许我拼错了一些东西,所以在控制台中我做:

document.getElementById('aisis-writer');
Run Code Online (Sandbox Code Playgroud)

我回来了:

<div id="aisis-writer"></div>
Run Code Online (Sandbox Code Playgroud)

所以我完全错过了什么?为什么我收到此错误?

Tim*_*gus 5

我遇到了同样的问题,因为脚本在解析DOM之前执行(也许你在索引头中包含你的脚本).要解决此问题,您可以defer在脚本包含中使用.

<head>
    ...
    <script src="app.js" defer></script>
    ...
</head>
Run Code Online (Sandbox Code Playgroud)

当页面完成解析时,defer属性会加载您的脚本,因此即使您将脚本放入索引头,您也可以确保脚本将找到所有元素,因为它们将存在.

W3Schools的 defer

更新

标准方法是在正文末尾添加脚本.它们应该在创建DOM之后加载,因此错误应该消失,因为当您使用JavaScript到达DOM时,它已经存在.defer在浏览器中广泛传播,所以除非你使用的是旧版本,否则不应该有问题.您可以使用defer它来安排您的代码.将标题内的"依赖关系"和正文中的"代码"放在一起似乎更直观.

在这里您可以参考defer的使用位置.