Errore di riferimento non rilevato: React non è definito


94

Sto cercando di far funzionare ReactJS con rails usando questo tutorial. Ricevo questo errore:


Uncaught ReferenceError: React is not defined

Ma posso accedere all'oggetto React nella console del browser.Ho anche aggiunto public / dist / turbo-react.min.js come descritto qui e ho anche aggiunto la riga in application.js come descritto in questa risposta a sfortuna. Inoltre, dà l'errore:inserisci qui la descrizione dell'immagine
//= require components
var React = require('react')
Uncaught ReferenceError: require is not defined

Qualcuno può suggerirmi come risolvere questo problema?

[EDIT 1]
Codice sorgente di riferimento:
questo è il mio comments.js.jsxfile:

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

E questo è il mio index.html.erb:

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

Risposte:


92

Sono stato in grado di riprodurre questo errore quando stavo usando webpack per creare il mio javascript con il seguente blocco nel mio webpack.config.json:

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

Questa configurazione precedente dice a webpack di non risolvere require('react')caricando un modulo npm, ma di aspettarsi invece una variabile globale (cioè windowsull'oggetto) chiamata React. La soluzione è rimuovere questo pezzo di configurazione (in modo che React venga fornito in bundle con il tuo javascript) o caricare il framework React esternamente prima che questo file venga eseguito (in modo che window.Reactesista).


4
La rimozione di questa configurazione ha risolto il problema per me.
DJ2

La rimozione di questa configurazione ha risolto il problema anche per me
coinhndp

grazie, anche questo mi ha aiutato.
rnd

54

Ho ricevuto questo errore perché stavo usando

import ReactDOM from 'react-dom'

senza importare reagire, una volta che l'ho cambiato in seguito:

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

L'errore è stato risolto :)


(più 1) -
Ha

2
Lavori! Questo è un po 'inaspettato proveniente da un linguaggio come Python. Se sto usando solo ReactDOMnel mio file principale, ho pensato di poter (e dover) eliminare il riferimento a React. Oh beh, ho imparato qualcosa.
jdm


35

Le ragioni possibili sono 1. non hai caricato React.JS nella tua pagina, 2. l'hai caricato dopo lo script sopra nella tua pagina. La soluzione è caricare il file JS prima dello script mostrato sopra.

PS

Possibili soluzioni.

  1. Se si menziona reactnella sezione esterna all'interno della configurazione del webpack, è necessario caricare prima i file react js direttamente nel proprio htmlbundle.js
  2. Assicurati di avere la linea import React from 'react';

15

Prova ad aggiungere:

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

prima della render()funzione.

Questo a volte impedisce la restituzione di un messaggio di errore:

React non è definito

L'aggiunta Reactalla finestra risolverà questi problemi.


1
L'ultima riga era la parte mancante per me.
Tasos K.

11

Aggiunta a Santosh:

Puoi caricare React by

import React from 'react'

1
@zero_cool Adoro i punti e virgola perché rende il codice più facile da leggere, ma sono opzionali in JavaScript. Se omessi, verranno inseriti automaticamente. La specifica ufficiale EcmaScript contiene queste informazioni: "Inoltre, i terminatori di riga, sebbene non siano considerati token, diventano anche parte del flusso di elementi di input e guidano il processo di inserimento automatico del punto e virgola (11.9)." da: tc39.github.io/ecma262/#sec-lexical-and-regexp-grammars che punta a questo: tc39.github.io/ecma262/#sec-automatic-semicolon-insertion Quindi tecnicamente, entrambi i tuoi esempi di codice sono JS corretto e valido.
Clomp


3

Ho ricevuto questo errore perché nel mio codice ho scritto male la definizione di un componente con lettere minuscole react.createClassanziché maiuscole React.createClass.


1

Stavo affrontando lo stesso problema. L'ho risolto importando Reacte mi ReactDOMpiace come segue:

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

1

Se stai usando Babel e React 17, potresti dover aggiungere "runtime2:" automatic "a config.

 {
     "presets": ["@babel/preset-env", ["@babel/preset-react", {
        "runtime": "automatic"
     }]]
 }


0

Se stai usando TypeScript, assicurati che il tuo file tsconfig.jsonabbia "jsx": "react"all'interno "compilerOptions".

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.