2014-10-17 26 views
28

Tôi vừa mới bắt đầu sử dụng React nên đây có thể là một sai lầm rất đơn giản, nhưng ở đây chúng tôi đi. Mã html của tôi rất đơn giản:Lỗi phản hồi: Vùng chứa đích không phải là Phần tử DOM

<!-- 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> 

Lưu ý rằng tôi đang sử dụng các tệp tĩnh tải của django tại đây. javascript của tôi là phức tạp hơn một chút, vì vậy tôi sẽ không đăng nó tất cả ở đây trừ khi ai đó yêu cầu nó, nhưng phù hợp với quy lỗi là thế này:

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

Sau đó tôi nhận được 'container mục tiêu không phải là một DOM lỗi phần tử 'nhưng có vẻ như document.getElementById ("nội dung") gần như chắc chắn là một phần tử DOM.

Tôi đã xem this bài đăng trên stackoverflow, nhưng dường như nó không giúp ích gì cho tình huống của tôi.

Bất kỳ ai cũng biết tại sao tôi lại gặp phải lỗi đó?

Trả lời

53

Tôi đã tìm ra!

Sau khi đọc this blog post tôi nhận ra rằng vị trí của dòng này:

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

đã sai. Dòng đó cần phải là dòng cuối cùng trong phần <body>, ngay trước thẻ </body>. Di chuyển dòng xuống giải quyết vấn đề.

Giải thích của tôi cho điều này là phản ứng đang tìm kiếm id ở giữa các thẻ <head>, thay vì trong các thẻ <body>. Do đó, nó không thể tìm thấy id content và do đó nó không phải là một phần tử DOM thực.

+14

Cách khác (và có lẽ là một ý tưởng hay), là kết thúc cuộc gọi 'React.render' trong trình nghe đang tải/sẵn sàng. Sau đó, nó sẽ không quan trọng nơi bạn đặt các thẻ script như nút sẽ tồn tại. –

+0

@ PaulO'Shannessy Ahhh có ý nghĩa! Tôi sẽ làm điều đó. – lnhubbell

3

Ngoài ra, cách tốt nhất để di chuyển <script></script> của bạn xuống dưới cùng của tệp html cũng sẽ sửa lỗi này.

+0

yep, sử dụng React 16.2 và đó là vấn đề của tôi –

Các vấn đề liên quan