Meteor-React错误:修复后,目标容器不是DOM元素

时间:2017-06-12 19:18:32

标签: javascript reactjs meteor

我复制+粘贴代码来自:https://stackoverflow.com/questions/41514549/

然后,我修正错误并将'class'改为'id',所以:

main.html中

<head>
  <title>React Meteor Voting</title>
</head>
<body>
  <div id="render-target"></div>
</body>

main.jsx

import React, { Component } from 'react';
import {Meteor} from 'meteor/meteor';
import { render } from 'react-dom';

Meteor.startup(() => {
  render(<App />, document.getElementById('render-target'));
});

class App extends Component {
  render(){
    return (
      <h1>Hello!</h1>
    );
  }
}

的package.json

{
  "name": "test-react",
  "private": true,
  "scripts": {
    "start": "meteor run"
  },
  "dependencies": {
    "babel-runtime": "^6.20.0",
    "meteor-node-stubs": "~0.2.4",
    "react": "^15.5.4",
    "react-dom": "^15.5.4"
  }
}

但我得到了同样的错误:

  

未捕获错误:_registerComponent(...):目标容器不是DOM   元件。           at invariant(modules.js?hash = de726ed ...:12672)           at Object._renderNewRootComponent(modules.js?hash = de726ed ...:30752)           at Object._renderSubtreeIntoContainer(modules.js?hash = de726ed ...:30842)           在渲染(modules.js?hash = de726ed ...:30863)           在app.js?hash = 71ef103 ...:46           在maybeReady(meteor.js?hash = 27829e9 ...:809)           在HTMLDocument.loadingCompleted(meteor.js?hash = 27829e9 ...:821)

让我发疯了......

10 个答案:

答案 0 :(得分:37)

基本上,该问题是由于HTML呈现而发生的。创建流星应用程序时,默认情况下会出现火焰,并且您正在处理带有反作用的流星或带有角的流星。您可以通过两种方法解决此错误。

方法1 只需在main.js中添加导入语句

import './main.html';

方法2 更好,因为这是我的选择

meteor remove blaze-html-templates
meteor add static-html

答案 1 :(得分:27)

如果您删除blaze-html-templates,则需要添加static-html包来编译index.html并避免此错误(请参阅Meteor Guide,段落结尾):

 meteor add static-html

答案 2 :(得分:14)

我有同样的问题。这就是我解决的方法。

在终端中,在项目目录中键入以下行。

meteor remove blaze-html-templates
meteor add static-html

答案 3 :(得分:8)

对我来说,我只需要在尝试渲染DOM之前导入.html文件。

import './main.html';

答案 4 :(得分:4)

meteor remove blaze-html-templates
meteor add static-html

答案 5 :(得分:1)

将您的脚本标记添加到结束</body>标记之前,该标记很可能是在DOM ID之前加载的脚本。

也可以改变它......

import React, { Component } from 'react';
import {Meteor} from 'meteor/meteor';
import { render } from 'react-dom';

class App extends Component {
  render(){
    return (
      <h1>Hello!</h1>
    );
  }
}

Meteor.startup(() => {
  render(<App />, document.getElementById('render-target'));
});

答案 6 :(得分:0)

我删除了包(blaze-html-templates)。

我认为没有必要使用Meteor + React,但它用于编译main.html。

使用

添加包blaze-html-templates

meteor add blaze-html-templates

解决问题。

答案 7 :(得分:0)

首先删除blaze模板依赖项

meteor remove blaze-html-templates

然后添加静态html

meteor add static-html

答案 8 :(得分:0)

就我而言,修复很简单。在HTML中,将类更改为id。

render( <h1>Hello</h1>, document.getElementById("app"))

<body>
<div class="app"><`enter code here`/div>
</body>

<body>
<div id="app"><`enter code here`/div>
</body>

答案 9 :(得分:0)

这是旧文章,但它在Google搜索结果中排名第一,所以...

我在我的Android版本上遇到此错误,但在Web上却没有,已经清除了火焰并添加了statichtml。

我的问题最终是我在HTML中导入了一个favicon和manifest.json,但我还没有开始创建它们。

我删除了链接,它就像一个魅力。

希望这可以节省一些挖掘工作的时间。