var React = require('react');
module.exports=React.createClass({
render:function(){
return(
<div>
<h1> the list </h1>
</div>
)}
})
Lorsque j'exécute le code ci-dessus, le message d'erreur suivant s'affiche:
app.js:4 Uncaught TypeError: React.createClass is not a function
Est-ce à cause d'une différence de version ou d'une faute de frappe?
package.json-I have included create-react-class as seen here but not in the bower.json file
{
"dependencies": {
"browser-sync": "^2.18.13",
"browserify": "^14.4.0",
"create-react-class": "^15.6.2",
"ejs": "^2.5.7",
"express": "^4.16.0",
"gulp": "^3.9.1",
"gulp-live-server": "0.0.31",
"react": "^16.0.0",
"reactify": "^1.1.1",
"vinyl-source-stream": "^1.1.0"
}
}
gulpfile.js -Am il manque quelques dépendances dans ce fichier
var gulp= require('gulp');
var LiveServer= require('gulp-live-server');
var browserSync=require('browser-sync');
var browserify = require('browserify');
var reactify= require('reactify');
var source = require('vinyl-source-stream');
gulp.task('live-server', function(){
var server= new LiveServer('server/main.js');
server.start();
})
gulp.task('bundle',function(){
return browserify({
entries:'app/main.jsx',
debug:true,
})
.transform(reactify)
.bundle()
.pipe(source('app.js'))
.pipe(gulp.dest('./.tmp'))
})
gulp.task('serve',['bundle','live-server'],function(){
browserSync.init(null,{
proxy: "http://localhost:7777",
port:9001
})
})
Et mon main.jsx a le suivant
var React = require('react');
var createReactClass = require('create-react-class');
var GroceryItemList=require('./components/GroceryItemsList.jsx');
React.render(<GroceryItemList/>,app);
l'epicerieitems.jsx a la suivante
var React = require('react');
var createReactClass = require('create-react-class');
module.exports=React.createReactClass({
render:function(){
return(
<div>
<h1> Grocery Listify </h1>
</div>
)
}
})
Lorsque j'ajoute la commande createReactClass, un message d'erreur s'affiche: createReactClass n'est pas une fonction et lorsque j'ajoute la syntaxe d'importation et ES6, la récupération est incorrecte.
Naveen
Selon les documents , vous devez obtenir le paquet npm create react class. A partir de la ligne de commande du chemin de fichier de votre projet, vous devez faire npm install create-react-class --save
, puis modifier le code comme suit:
var React = require('react');
//You need this npm package to do createReactClass
var createReactClass = require('create-react-class');
module.exports=createReactClass({
render:function(){
return(
<div>
<h1> the list </h1>
</div>
)
}
Vous devez également utiliser React DOM pour rendre les composants comme suit:
npm install react react-dom
var ReactDOM = require('react-dom');
ReactDOM.render(<GroceryItemList/>,app);
C’est sûrement un problème de version. Si vous commencez tout juste, je vous conseillerais de créer un React component
en développant React.Component
au lieu d’utiliser React.createClass
car il est obsolète à partir de la version 16.0
et a été déplacé vers un package séparé 'create-react-class'
sous le nom @Dream_Cap également mentionné.
Également aller avec la syntaxe ES6 pour les importations. Vous modifieriez votre code pour
import React from 'react';
export default class App extends React.Component {
render(){
return(
<div>
<h1> the list </h1>
</div>
)
}
}
Si vous obtenez une erreur indiquant que React.creatClass est une fonction non définie, c'est que les nouvelles versions de react ne prennent pas en charge cette fonctionnalité.
Vous pouvez essayer le ci-dessous:
Installez le package NPM create-react-class:
npm installer create-react-class --save-dev
Créez ensuite une nouvelle variable sous la variable ReactDom:
var createReactClass = require ('create-react-class');
Maintenant, au lieu d'utiliser React.createClass () pour les composants, utilisez var createReactClass ()
Exemple: Remplacez ceci:
var TodoComponent = React.createClass ({render: function () { return (
<h1>
Helloooo</h1>
);}});
Avec ça:
var TodoComponent = createReactClass ({render: function () { return (
<h1>
Helloooo</h1>
);}});
Merci pour toute l'aide. Voici comment se présente la réponse finale: 1) utilisez react-dom pour rendre
var ReactDOM = require('react-dom');
var List=require('./components/List.jsx');
ReactDOM.render(<List/>,app);
2) utilisez create-react-class (not react) et exportez-le 'module.exports= createReactClass({
.... au lieu de module.exports=React.createReactClass
(cela donne une erreur' createReactClass 'n'est pas une fonction
Merci encore à tous!
Nouveaux avertissements de dépréciation de React v15.5.0 +
Le plus gros changement est que nous avons extrait
React.PropTypes
et React.createClass dans leurs propres packages. Les deux sont toujours accessibles via l’objet principalReact
, mais l’utilisation de l’un ou de l’autre enregistrera un fichier ponctuel avertissement de dépréciation à la console en mode de développement. Cette volonté activer les optimisations futures de la taille du code.
Lorsque React a été initialement publié, il n'y avait pas de moyen idiomatique de créer des classes en JavaScript, nous avons donc fourni notre propre:
React.createClass
.Plus tard, les classes ont été ajoutées à la langue dans le cadre de
ES2015
, donc nous ajout de la possibilité de créer des composants React à l'aide de classes JavaScript . Avec les composants fonctionnels, les classes JavaScript sont maintenant lesmoyen privilégié de créer des composants dans React.Pour vos composants
createClass
existants, nous vous recommandons les migrer vers des classes JavaScript. Cependant, si vous avez des composants qui reposent surmixins
, la conversion en classes peut ne pas être immédiate réalisable. Si tel est le cas,create-react-class
est disponible dansnpm
sous forme de fichier instantané remplacement:
// Before (15.4 and below)
var React = require('react');
var Component = React.createClass({
mixins: [MixinA],
render() {
return <Child />;
}
});
// After (15.5)
var React = require('react');
var createReactClass = require('create-react-class');
var Component = createReactClass({
mixins: [MixinA],
render() {
return <Child />;
}
});
Vos composants continueront à fonctionner comme auparavant.
Si vous êtes intéressé à utiliser nouvelles classes javascript, je vous suggère de jeter un oeil à ici .
Mais pour un accès rapide, j'inclus quelques lignes ici:
Le moyen le plus simple de définir un composant consiste à écrire une fonction JavaScript:
function Welcome(props) {
return <h1>Hello, {props.name}</h1>;
}
Cette fonction est un composant React valide car elle accepte un seul argument d'objet props
(qui représente les propriétés) avec des données et renvoie un élément React. Nous appelons ces composants functional
car ce sont littéralement des fonctions JavaScript.
Vous pouvez également utiliser une classe ES6 pour définir un composant:
class Welcome extends React.Component {
render() {
return <h1>Hello, {this.props.name}</h1>;
}
}
Les deux composants ci-dessus sont équivalents du point de vue de React.
import React, { Component } from 'react';
import logo from './logo.svg';
import './App.css';
const App = function(){};
App.prototype = Object.create(Component.prototype);
App.prototype.render = function(){
return (
<div className="App">
<header className="App-header">
<img src={logo} className="App-logo" alt="logo" />
<h1 className="App-title">Welcome to React</h1>
</header>
<p className="App-intro">
To get started, edit <code>src/App.js</code> and save to reload.
</p>
</div>
)
}
export default App;
De cette façon, vous pourriez éviter le mot clé de classe
Commencez par essayer l’installation de npm. Il est possible que vos développements dans package.json ne soient pas complètement installés.
React.createClass ne figure pas dans la documentation mise à jour, vous devez utiliser createComponent avec ECMA6 Class