Error de referencia no detectado: React no está definido

89

Estoy tratando de hacer que ReactJS funcione con rieles usando este tutorial. Recibo este error:


Uncaught ReferenceError: React is not defined

Pero puedo acceder al objeto React en la consola del navegador . También agregué public / dist / turbo-react.min.js como se describe aquí y también agregué una línea en application.js como se describe en esta respuesta a no tener suerte. Además, da el error:ingrese la descripción de la imagen aquí
//= require components
var React = require('react')
Uncaught ReferenceError: require is not defined

¿Alguien puede sugerirme cómo resolver esto?

[EDITAR 1]
Código fuente para referencia:
Este es mi comments.js.jsxarchivo:

var Comment = React.createClass({
  render: function () {
    return (
      <div className="comment">
        <h2 className="commentAuthor">
          {this.props.author}
        </h2>
          {this.props.comment}
      </div>
      );
  }
});

var ready = function () {
  React.renderComponent(
    <Comment author="Richard" comment="This is a comment "/>,
    document.getElementById('comments')
  );
};

$(document).ready(ready);

Y este es mi index.html.erb:

<div id="comments"></div>
sky_coder123
fuente

Respuestas:

91

Pude reproducir este error cuando estaba usando webpack para construir mi javascript con el siguiente fragmento en mi webpack.config.json:

externals: {
    'react': 'React'
},

Esta configuración anterior le dice al paquete web que no se resuelva require('react')cargando un módulo npm, sino que espere una variable global (es decir, en el windowobjeto) llamada React. La solución es eliminar esta parte de la configuración (por lo que React se incluirá con su javascript) o cargar el marco de React externamente antes de que se ejecute este archivo (para que window.Reactexista).

Barnasaurus Rex
fuente
4
Eliminar esta configuración me solucionó el problema.
DJ2
Eliminar esta configuración también resolvió el problema para mí
coinhndp
50

Recibí este error porque estaba usando

import ReactDOM from 'react-dom'

sin importar reaccionar, una vez que lo cambié a continuación:

import React from 'react';
import ReactDOM from 'react-dom';

Se solucionó el error :)

Akshat Gupta
fuente
(más 1) - Tiene perfecto sentido
Paul Samsotha
2
¡Trabajos! Eso es un poco inesperado viniendo de un lenguaje como Python. Si solo estoy usando ReactDOMen mi archivo principal, pensé que puedo (y debo) deshacerme de la referencia a React. Bueno, aprendí algo.
jdm
35

Las posibles razones son: 1. no cargó React.JS en su página, 2. lo cargó después del script anterior en su página. La solución es cargar el archivo JS antes del script que se muestra arriba.

PD

Soluciones posibles.

  1. Si menciona reacten la sección de externos dentro de la configuración del paquete web, entonces debe cargar los archivos de reacción js directamente en su html antesbundle.js
  2. Asegúrate de tener la línea import React from 'react';
J Santosh
fuente
14

Intenta agregar:

import React from 'react'
import { render } from 'react-dom'
window.React = React

antes de la render()función.

Esto a veces evita que el error aparezca en la ventana emergente:

Reaccionar no está definido

Agregar Reacta la ventana resolverá estos problemas.

Santosh Suryawanshi
fuente
1
La última línea fue la parte que me faltaba.
Tasos K.
11

Añadiendo a Santosh:

Puedes cargar React por

import React from 'react'
Imamudin Naseem
fuente
1
@zero_cool Me encantan los puntos y comas porque hacen que el código sea más fácil de leer, pero son opcionales en JavaScript. Cuando se omiten, se insertarán automáticamente. La especificación oficial de EcmaScript tiene esta información: "Además, los terminadores de línea, aunque no se consideran tokens, también se vuelven parte del flujo de elementos de entrada y guían el proceso de inserción automática de punto y coma (11.9)". from: tc39.github.io/ecma262/#sec-lexical-and-regexp-grammars que apunta a esto: tc39.github.io/ecma262/#sec-automatic-semicolon-insertion Entonces, técnicamente, ambos ejemplos de código son JS correcto y válido.
Clomp
3
import React, { Component, PropTypes } from 'react';

¡Esto también puede funcionar!

Abraham Jagadeesh
fuente
3

Recibí este error porque en mi código escribí mal la definición de un componente con minúsculas en react.createClasslugar de mayúsculas React.createClass.

nómada
fuente
1

Estaba enfrentando el mismo problema. Lo resolví importando Reacty me ReactDOMgusta de la siguiente manera:

import React from 'react';
import ReactDOM from 'react-dom';
anand shukla
fuente
0

Si está utilizando TypeScript, asegúrese de que tsconfig.jsontiene "jsx": "react"dentro "compilerOptions".

pseudosudo
fuente