2015-08-18 21 views
37

Sto cercando di far funzionare ReactJS con le guide utilizzando il tutorial this. Sto ottenendo questo errore:Uncaught ReferenceError: React non definito


Uncaught ReferenceError: React is not defined

Ma posso accedere all'oggetto reagire in console del browser enter image description here
Ho anche aggiunto public/dist/turbo-react.min.js come descritto here ed anche ha aggiunto //= require components linea in application.js come descritto in this answer senza fortuna. Inoltre,
var React = require('react') dà l'errore:
Uncaught ReferenceError: require is not defined

Qualcuno mi può suggerire su come risolvere questo?

[EDIT 1]
Il codice sorgente di riferimento:
Questo è il mio comments.js.jsx di file:

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> 

risposta

39

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

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

Questa configurazione sopra dice a webpack di non risolvere require('react') caricando un modulo npm, ma invece di prevedere una variabile globale (ad es. sull'oggetto window) chiamato React. La soluzione è rimuovere questa configurazione (in modo che React sia in bundle con javascript) o caricare il framework React esternamente prima dell'esecuzione di questo file (in modo che esista window.React).

26

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

P.S

Soluzioni possibili.

  1. Se si parla react nella sezione esterni all'interno di configurazione webpack, allora è necessario caricare reagiscono file js direttamente nel tuo html prima bundle.js
  2. Assicurarsi di avere la linea import React from 'react';
6

Aggiungendo a Santosh:

È possibile caricare reagire

import React from 'react' 
+1

@zero_cool amo punti e virgola in quanto rende il codice più facile da leggere, ma sono facoltativi in ​​JavaScript. Se omessi, verranno automaticamente inseriti. Le specifiche ufficiali di EcmaScript hanno queste informazioni: "Inoltre, i terminatori di riga, anche se non sono considerati token, diventano parte del flusso di elementi di input e guidano il processo di inserimento automatico del punto e virgola (11.9)." da: https://tc39.github.io/ecma262/#sec-lexical-and-regexp-grammars che punta a questo: https://tc39.github.io/ecma262/#sec-automatic-semicolon-insertion So tecnicamente, entrambi i tuoi esempi di codice sono JS corretti e validi. – Clomp

1

ho ottenuto questo errore perché nel mio codice ho scritto male una definizione componente react.createClass minuscole al posto delle lettere maiuscole reagire. createClass.

2
import React, { Component, PropTypes } from 'react'; 

Questo può anche funzionare!

20

ho ottenuto questo errore perché stavo usando

import ReactDOM from 'react-dom' 

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

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

L'errore è stato risolto :)

+0

(più 1) - Ha perfettamente senso –

+0

Funziona! Questo è un po 'inaspettato da un linguaggio come Python. Se sto usando solo 'ReactDOM' nel mio file principale, ho pensato che posso (e dovrei) sbarazzarmi del riferimento a' React'. Oh bene, ho imparato qualcosa. – jdm

Problemi correlati