Me sale este error después de hacer una página de ejemplo de Reacción trivial:
Error no detectado: Infracción invariable: _registerComponent (...): el contenedor de destino no es un elemento DOM.
Aquí está mi código:
/** @jsx React.DOM */
'use strict';
var React = require('react');
var App = React.createClass({
render() {
return <h1>Yo</h1>;
}
});
React.renderComponent(<App />, document.body);
HTML:
<html>
<head>
<script src="/bundle.js"></script>
</head>
<body>
</body>
</html>
¿Qué significa esto?
javascript
dom
reactjs
Dan Abramov
fuente
fuente

Respuestas:
En el momento en que se ejecuta el script, el
documentelemento aún no está disponible, porquescriptsí mismo está en elhead. Si bien es una solución válida para mantenerscriptenheady hacer que elDOMContentLoadedevento , que es aún mejor para poner suscripten la parte inferior de labodyy hacer que los componentes de la raíz a unadivantes de la siguiente manera:y en el
bundle.js, llame:Siempre debe renderizar a un anidado en
divlugar debody. De lo contrario, todo tipo de código de terceros (Google Font Loader, complementos del navegador, lo que sea) puede modificar elbodynodo DOM cuando React no lo espera y causar errores extraños que son muy difíciles de rastrear y depurar. Lea más sobre este tema.Lo bueno de poner
scripten la parte inferior es que no bloqueará la representación hasta que se cargue el script en caso de que agregue la representación del servidor React a su proyecto.Actualización: (07 de octubre de 2015 | v0.14 )
Ejemplo:
fuente
/index.html/app.js(IE9 +)
Nota : Tener
<script async src="..."></script>en el encabezado asegura que el navegador comenzará a descargar el paquete de JavaScript antes de cargar el contenido HTML.Fuente: React Starter Kit , cargador de estilo isomorfo
fuente
ReactDOM.renderlugar deReact.render.deferpuede ser una mejor opciónla función ready se puede usar así:
Si no desea usar jQuery, puede usar la
onloadfunción:fuente
DOMContentLoadedsería más apropiado incluso para manejar queload(esto es lo que usa jQuery ). También puede hacer esto en JS conwindow.addEventListener, sin necesidad de controladores en línea y funciones globales.$(document).readyresuelve el problema. Ah y sí, use enrenderlugar derenderComponent.solo una conjetura, ¿qué tal si agregamos a index.html lo siguiente:
Me gusta esto:
¡Para mí funcionó! :-)
fuente
type="text/javascript"funcionó correctamente.Me encontré con el mismo error. Resultó ser causado por un simple error tipográfico después de cambiar mi código de:
a
Observe el '#' que falta. Debería haber sido
Solo publica en caso de que ayude a alguien más a resolver este error.
fuente
Sí, básicamente lo que hizo es correcto, excepto que olvida que JavaScript está sincronizado en muchos casos, por lo que ejecuta el código antes de que se cargue su DOM , hay pocas maneras de resolver esto:
1) Verifique si DOM está completamente cargado, luego haga lo que quiera, puede escuchar DOMContentLoaded, por ejemplo:
2) Una forma muy común es agregar la etiqueta del script en la parte inferior de su
document(después de la etiqueta del cuerpo):3) Uso
window.onload, que se activa cuando se carga toda la página (img, etc.)4) Uso
document.onload, que se dispara cuando el DOM está listo:Incluso hay más opciones para verificar si DOM está listo, pero la respuesta corta es NO ejecutar ningún script antes de asegurarse de que su DOM esté listo en todos los casos ...
JavaScript funciona junto con elementos DOM y si no están disponibles, devolverá nulo , podría romper toda la aplicación ... así que siempre asegúrese de estar completamente listo para ejecutar su JavaScript antes de hacerlo ...
fuente
Si usa webpack para representar su reacción y usa HtmlWebpackPlugin en su reacción, este complemento construye su index.html en blanco por sí mismo e inyecta el archivo js en él, por lo que no contiene el elemento div, ya que HtmlWebpackPlugin documenta puede crear su propio índice. html y dar su dirección a este complemento, en mi webpack.config.js
y este es mi archivo index.html
fuente
HtmlWebpackPlugincomplemento aquí si se usa para hacer referencia al archivo HTML estático?En mi caso, este error fue causado por la recarga en caliente, al introducir nuevas clases. En esa etapa del proyecto, use observadores normales para compilar su código.
fuente
Para aquellos que usan ReactJS.Net y obtienen este error después de una publicación:
Verifique las propiedades de sus archivos .jsx y asegúrese de que
Build Actionesté configurado enContent. Los establecidos paraNoneno serán publicados. Encontré esta solución a partir de esta respuesta SO .fuente
Me encontré con un mensaje de error similar / similar. En mi caso, no tenía el nodo DOM de destino que representa el componente ReactJS definido. Asegúrese de que el nodo de destino HTML esté bien definido con "id" o "nombre" apropiados, junto con otros atributos HTML (adecuados para su necesidad de diseño)
fuente
es fácil simplemente hacer HTML CSS básico js y renderizar el script desde js
fuente
Cuando tienes:
Error: Error no detectado: el contenedor de destino no es un elemento DOM.
Puede usar el evento DOMContentLoaded o mover su
<script ...></script>etiqueta en la parte inferior de su cuerpo.fuente