J'essaie de me connecter à mon application. C'est une Rails utilisant Rails-react (bien que je ne pense pas que cela fasse partie du problème). J'utilise actuellement une configuration très simple à 1 composant:
// react_admin.js.jsx
/** @jsx React.DOM */
var CommentBox = React.createClass({
render: function() {
return (
<div className="commentBox">
Hello, world! I am a CommentBox.
</div>
);
}
});
React.render(
<CommentBox />,
document.getElementById('content')
);
Mon fichier html contient:
<body>
<div id="content"></div>
<script src="/assets/react.js?body=1"></script>
<script src="/assets/react_admin.js?body=1"></script>
</body>
Je peux voir que Rails-react convertit mon react_admin.js.jsx en react_admin.js comme suit:
/** @jsx React.DOM */
var CommentBox = React.createClass({displayName: 'CommentBox',
render: function() {
return (
React.DOM.div({className: "commentBox"},
"Hello, world! I am a CommentBox."
)
);
}
});
React.render(
CommentBox(null),
document.getElementById('content')
);
Cependant chrome déclenche une '' TypeError Uncaught: undefined n'est pas une fonction '' dans l'appel Render.react (), qu'il affiche entre "(" et "CommentBox (null)"
Quelqu'un peut-il me dire ce que je fais mal?
Après 0.14 React déplacé vers ReactDOM.render()
, donc si vous mettez à jour React, votre code devrait être:
ReactDOM.render(
<CommentBox />, document.getElementById('content'));
Mais assurez-vous d'inclure les deux react.js
et react-dom.js
dans votre projet car ceux-ci sont désormais séparés.
Vous devez mettre à jour la dernière bibliothèque React.
Certains didacticiels ont été mis à jour pour utiliser React.render()
au lieu de la fonction obsolète React.renderComponent()
, mais les auteurs fournissent toujours des liens vers des versions plus anciennes ou React, qui n'ont pas la plus récente render()
méthode.
Je ne connais pas très bien React, mais il semble que vous devriez utiliser React.renderComponent
au lieu de React.render
En exécutant votre code généré par Rails-react
localement sur mon navigateur et en jouant avec l'objet React
, il semble que la méthode render
n'existe pas. Au lieu de cela, React
contient une méthode renderComponent
:
Si vous modifiez le code pour utiliser React.renderComponent
au lieu de React.render
, le composant est rendu sur le DOM.
Vous pouvez le voir fonctionner ici: http://jsfiddle.net/popksfb0/
Pour des raisons que je ne connaissais pas, j'ai dû envelopper le mien dans {}
Donc à partir de:
import React from "react";
import render from "react-dom";
import Router from "./Router";
render(Router, document.getElementById ('app'));
Pour (travail):
import React from "react";
import {render} from "react-dom";
import Router from "./Router";
render(Router, document.getElementById ('app'));
Après 0.13.x React a déplacé React.renderComponent()
vers React.render()
.
Voici le script complet référençant votre code initial.
<style>
.commentBox{
color:red;
font-size:16px;
font-weight:bold
}
</style>
<script src="build/react.js"></script>
<script src="build/react-dom.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/babel-core/5.8.24/browser.min.js"></script>
<script type="text/babel">
var CommentBox = React.createClass({
render: function(){
return (
React.DOM.div({className: "commentBox"},
"Hello, world! I am a CommentBox."
)
);
}
});
ReactDOM.render(
<CommentBox/>,
document.getElementById('content')
);
</script>
React.render a été introduit dans la version 0.12 comme indiqué ici: https://facebook.github.io/react/blog/2014/10/28/react-v0.12.html
Pour résoudre votre problème, mettez à niveau vers cette version ou une version ultérieure. Au moment de la rédaction, la dernière version est la 0.13.3.
Pour les débutants, l'erreur (type/undefined n'est pas défini) peut également apparaître en raison du placement du bloc de code React.render.
Il doit être placé après la création des composants, de préférence en bas.