J'essaie de faire fonctionner ReactJS avec Rails en utilisant this tutorial. Je reçois cette erreur:
Uncaught ReferenceError: React is not defined
Mais je peux accéder à l’objet React dans la console du navigateur
J'ai aussi ajouté public/dist/turbo-react.min.js comme décrit ici et ajouté //= require components
ligne dans application.js comme décrit dans cette réponse à aucune chance. Aditionellement,var React = require('react')
donne l'erreur:Uncaught ReferenceError: require is not defined
Quelqu'un peut-il me suggérer une solution à ce problème?
[EDIT 1]
Code source pour référence:
Ceci est mon fichier comments.js.jsx
:
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>
J'ai été en mesure de reproduire cette erreur lorsque j'utilisais Webpack pour créer mon code javascript avec le bloc suivant dans mon webpack.config.json
:
externals: {
'react': 'React'
},
La 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'objet window
) appelée React
. La solution consiste à supprimer cette partie de la configuration (afin que React soit associé à votre javascript) ou à charger le framework React avant que ce fichier ne soit exécuté (pour que window.React
existe).
J'ai eu cette erreur parce que j'utilisais
import ReactDOM from 'react-dom'
sans importer réagit, une fois que je l'ai changé en dessous:
import React from 'react';
import ReactDOM from 'react-dom';
L'erreur a été résolue :)
Si vous utilisez Webpack, vous pouvez le charger React si nécessaire sans avoir à explicitement require
le dans votre code.
Ajouter à webpack.config.js :
plugins: [
new webpack.ProvidePlugin({
"React": "react",
}),
],
Voir http://webpack.github.io/docs/shimming-modules.html#plugin-provideplugin
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 présenté ci-dessus.
P.S
Solutions possibles.
react
dans la section externalals de la configuration du webpack, vous devez alors charger les fichiers js réagis directement dans votre code html avant le bundle.js
import React from 'react';
Ajout à Santosh:
Vous pouvez charger React en
import React from 'react'
import React, { Component, PropTypes } from 'react';
Cela peut aussi fonctionner!
ajouter
import React from 'react'
import { render } from 'react-dom'
window.React = React
avant la fonction de rendu
ceci est dû au fait qu'une erreur apparaîtra quelque temps en disant que React n'est pas défini
ajouter réagir à la fenêtre traitera ces problèmes
J'ai eu cette erreur parce que dans mon code, j'ai mal orthographié une définition de composant avec des minuscules _react.createClass
_ au lieu de des majuscules _React.createClass
_.