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>

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


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


(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';


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.


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'

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

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.


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


0

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

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.