Uncaught ReferenceError: React n'est pas défini

89

J'essaie de faire fonctionner ReactJS avec des rails en utilisant ce tutoriel. J'obtiens cette erreur:


Uncaught ReferenceError: React is not defined

Mais je peux accéder à l'objet React dans la console du navigateur.J'ai également ajouté public / dist / turbo-react.min.js comme décrit ici et également ajouté une ligne dans application.js comme décrit dans cette réponse à pas de chance. De plus, donne l'erreur:entrez la description de l'image ici
//= require components
var React = require('react')
Uncaught ReferenceError: require is not defined

Quelqu'un peut-il me suggérer comment résoudre ce problème?

[EDIT 1]
Code source pour référence:
Ceci est mon comments.js.jsxfichier:

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);

Et voici mon index.html.erb:

<div id="comments"></div>
sky_coder123
la source

Réponses:

91

J'ai pu reproduire cette erreur lorsque j'utilisais webpack pour créer mon javascript avec le morceau suivant dans mon webpack.config.json:

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

Cette configuration ci-dessus indique à webpack de ne pas résoudre require('react')en chargeant un module npm, mais plutôt d'attendre une variable globale (c'est-à-dire sur l' windowobjet) appelée React. La solution est soit de supprimer cette partie de la configuration (donc React sera fourni avec votre javascript), soit de charger le framework React en externe avant que ce fichier ne soit exécuté (afin qu'il window.Reactexiste).

Barnasaurus Rex
la source
4
La suppression de cette configuration a résolu le problème pour moi.
DJ2
La suppression de cette configuration a également résolu le problème pour moi
coinhndp
50

J'ai eu cette erreur parce que j'utilisais

import ReactDOM from 'react-dom'

sans importer de réagir, une fois que je l'ai changé en ci-dessous:

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

L'erreur a été résolue :)

Akshat Gupta
la source
(plus 1) -
Ça a du
2
Travaux! C'est un peu inattendu venant d'un langage comme Python. Si je n'utilise que ReactDOMdans mon fichier principal, je pensais pouvoir (et devrais) supprimer la référence à React. Oh bien, j'ai appris quelque chose.
jdm
35

Les raisons possibles sont 1. vous n'avez pas chargé React.JS dans votre page, 2. vous l'avez chargé après le script ci-dessus dans votre page. La solution consiste à charger le fichier JS avant le script ci-dessus.

PS

Solutions possibles.

  1. Si vous mentionnez reactdans la section externals de la configuration du webpack, vous devez charger les fichiers react js directement dans votre html avantbundle.js
  2. Assurez-vous d'avoir la ligne import React from 'react';
J Santosh
la source
14

Essayez d'ajouter:

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

avant la render()fonction.

Cela empêche parfois une erreur de retour de pop-up:

React n'est pas défini

L'ajout Reactà la fenêtre résoudra ces problèmes.

Santosh Suryawanshi
la source
1
La dernière ligne était la partie manquante pour moi.
Tasos K.
11

Ajout à Santosh:

Vous pouvez charger React par

import React from 'react'
Imamudin Naseem
la source
1
@zero_cool J'adore les points-virgules car cela facilite la lecture du code, mais ils sont facultatifs en JavaScript. Lorsqu'ils sont omis, ils seront automatiquement insérés. La spécification EcmaScript officielle contient cette information: "De plus, les terminateurs de ligne, bien que n'étant pas considérés comme des jetons, font également partie du flux d'éléments d'entrée et guident le processus d'insertion automatique de point-virgule (11.9)." de: tc39.github.io/ecma262/#sec-lexical-and-regexp-grammars qui pointe vers ceci: tc39.github.io/ecma262/#sec-automatic-semicolon-insertion Donc techniquement, vos deux exemples de code sont JS correct et valide.
Clomp le
3
import React, { Component, PropTypes } from 'react';

Cela peut également fonctionner!

Abraham Jagadeesh
la source
3

J'ai eu cette erreur parce que dans mon code, j'ai mal orthographié une définition de composant avec des minuscules react.createClassau lieu de majuscules React.createClass.

nomade
la source
1

J'étais confronté au même problème. Je l'ai résolu en important Reactet ReactDOMcomme suit:

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

Si vous utilisez tapuscrit, assurez - vous que votre tsconfig.jsona à l' "jsx": "react"intérieur "compilerOptions".

pseudosudo
la source