Подтвердить что ты не робот

React Error: Target Container не является элементом DOM

Я только начал использовать React, так что это, вероятно, очень простая ошибка, но здесь мы идем. Мой html-код очень прост:

<!-- base.html -->
<html>
  <head>
    <title>Note Cards</title>
    <script src="http://fb.me/react-0.11.2.js"></script>
<!--     <script src="http://fb.me/JSXTransformer-0.11.2.js"></script> -->
    <script src="http://code.jquery.com/jquery-1.10.0.min.js"></script>
    {% load staticfiles %}
    <link rel="stylesheet" type="text/css" href="{% static "css/style.css" %}">
    <script src="{% static "build/react.js" %}"></script>
  </head>
  <body>
    <h1 id="content">Note Cards</h1>
    <div class="gotcha"></div>
  </body>
</html>

Обратите внимание, что здесь я использую статические файлы загрузки django. Мой javascript немного сложнее, поэтому я не буду публиковать его здесь, если только кто-то его не попросит, но строка с ошибкой такова:

React.renderComponent(
  CardBox({url: "/cards/?format=json", pollInterval: 2000}),
  document.getElementById("content")
);

После этого я получаю, что "целевой контейнер не является ошибкой элемента DOM", но кажется, что document.getElementById( "content" ) почти наверняка является элементом DOM.

Я просмотрел этот пост stackoverflow, но, похоже, это не помогло в моей ситуации.

У кого-нибудь есть идея, почему я получаю эту ошибку?

4b9b3361

Ответ 1

Я понял это!

После чтения этого сообщения в блоге я понял, что размещение этой строки:

<script src="{% static "build/react.js" %}"></script>

был неправильным. Эта строка должна быть последней строкой в ​​разделе <body>, перед тегом </body>. Перемещение линии вниз решает проблему.

Мое объяснение в том, что реакция искала идентификатор между тегами <head>, а не тегами <body>. Из-за этого он не смог найти id content, и, следовательно, он не был реальным элементом DOM.

Ответ 2

Кроме того, исправлена ​​и практика перемещения вашего <script></script> в нижней части html файла.

Ответ 3

Также убедитесь, что идентификатор, установленный в index.html, совпадает с идентификатором, указанным в index.js

index.html:

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

index.js:

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

Ответ 4

Просто чтобы дать альтернативное решение, потому что оно не упоминается.

Прекрасно использовать defer атрибута HTML здесь. Таким образом, при загрузке DOM, обычный <script> будет загружаться, когда DOM запускает скрипт. Но если мы используем defer, DOM и скрипт будут загружаться параллельно. Круто то, что скрипт будет оценен в конце - когда DOM загрузится (источник).

<script src="{% static "build/react.js" %}" defer></script>