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, но, похоже, это не помогло в моей ситуации.
У кого-нибудь есть идея, почему я получаю эту ошибку?
Ответы
Ответ 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>