je viens juste de commencer avec Reactjs et écrivais un composant simple à afficher li
tag et a rencontré cette erreur:
Jeton inattendu '<'
J'ai mis l'exemple ci-dessous à l'adresse jsbin http://jsbin.com/UWOquRA/1/edit?html,js,console,output
S'il vous plaît laissez-moi savoir ce que je fais mal.
Je l'ai résolu en utilisant type = "text/babel"
<script src="js/reactjs/main.js" type = "text/babel"></script>
UPDATE: Dans React 0.12+, le pragma JSX n'est plus nécessaire.
Assurez-vous d'inclure le pragma JSX en haut de vos fichiers:
/** @jsx React.DOM */
Sans cette ligne, le transformateur jsx
binaire et dans le navigateur laissera vos fichiers inchangés.
Le problème Le jeton inattendu '<' est dû à l'absence du préréglage babel.
Solution: vous devez configurer la configuration de votre webpack comme suit
{
test :/\.jsx?$/,
exclude:/(node_modules|bower_components)/,
loader :'babel',
query :{
presets:['react','es2015']
}
}
ici .jsx vérifie les formats .js et .jsx.
vous pouvez simplement installer la dépendance babel en utilisant le noeud comme suit
npm install babel-preset-react
Je vous remercie
dans mon cas, je n’avais pas réussi à inclure l’attribut type dans ma balise script.
<script type="text/jsx">
Vous devez transpiler/compiler ce code JSX en javascript ou utiliser le transformateur intégré au navigateur.
Regardez http://facebook.github.io/react/docs/getting-started.html et notez les balises <script>
, vous avez besoin de celles incluses pour que JSX fonctionne dans le navigateur.
Voici un exemple de travail de votre jsbin:
HTML:
<!DOCTYPE html>
<html>
<head>
<script src="//fb.me/react-with-addons-0.9.0.js"></script>
<meta charset=utf-8 />
<title>JS Bin</title>
</head>
<body>
<div id="main-content"></div>
</body>
</html>
jsx:
<script type="text/jsx">
/** @jsx React.DOM */
var LikeOrNot = React.createClass({
render: function () {
return (
<p>Like</p>
);
}
});
React.renderComponent(<LikeOrNot />, document.getElementById('main-content'));
</script>
Exécutez ce code à partir d'un seul fichier et cela devrait fonctionner.
J'ai cette erreur et je ne pouvais pas résoudre ce problème pendant deux jours.Alors la correction de l'erreur est très simple . Dans le corps, où vous connectez votre script
, ajoutez type="text/jsx"
et ceci résoudra le problème.
Utilisez le code suivant. J'ai ajouté une référence à React et React DOM. Utilisez ES6/Babel pour transformer votre code JS en JavaScript Vanilla. Notez que la méthode de rendu provient de ReactDOM et assurez-vous que la cible de la méthode de rendu est spécifiée dans le DOM . Parfois, vous pouvez être confronté à un problème qui empêche la méthode de rendu () de trouver l'élément cible. Cela est dû au fait que le code de réaction est exécuté avant le rendu du DOM. Pour contrer cela, utilisez jQuery ready () pour appeler la méthode render () de React. De cette façon, vous serez sûr que DOM sera rendu en premier. Vous pouvez également utiliser l'attribut defer sur votre script d'application.
Code HTML:
<!DOCTYPE html>
<html>
<head>
<meta charset=utf-8 />
<title>JS Bin</title>
</head>
<body>
<div id='main-content'></div>
<script src="CDN link to/react-15.1.0.js"></script>
<script src="CDN link to/react-dom-15.1.0.js"></script>
</body>
</html>
Code JS:
var LikeOrNot = React.createClass({
render: function () {
return (
<li>Like</li>
);
}
});
ReactDOM.render(<LikeOrNot />,
document.getElementById('main-content'));
J'espère que cela résout votre problème. :-)
Pour une analyse correcte des balises, vous devez utiliser cette version de Babel: https://cdnjs.cloudflare.com/ajax/libs/babel-core/5.8.24/browser.js et attribut "type = 'text/babel '"dans le script. En outre, votre script personnalisé doit figurer dans les balises "body".
si nous considérons la configuration de votre site réel, il vous faudra exécuter ReactJS en tête
<!-- Babel ECMAScript 6 injunction -->
<script src="https://unpkg.com/babel-standalone@6/babel.min.js"></script>
et ajouter un attribut à votre fichier js - type = "text/babel" like
<script src="../js/r1HeadBabel.js" type="text/babel"></script>
alors l'exemple de code ci-dessous fonctionnera:
ReactDOM.render(
<h1>Hello, world!</h1>,
document.getElementById('root')
);
voici une autre façon de le faire html
<head>
<title>Parcel Sandbox</title>
<meta charset="UTF-8" />
</head>
<body>
<div id="app"></div>
<script src="src/index.js"></script>
</body>
</html>
fichier index.js avec le chemin src/index.js
import React from "react";
import { render } from "react-dom";
import "./styles.scss";
const App = () => (
<div>
<h1>Hello test</h1>
</div>
);
render(<App />, document.getElementById("app"));
utilisez ce package.json vous permettra de démarrer rapidement
{
"name": "test-app",
"version": "1.0.0",
"description": "",
"main": "index.html",
"scripts": {
"start": "parcel index.html --open",
"build": "parcel build index.html"
},
"dependencies": {
"react": "16.2.0",
"react-dom": "16.2.0",
"react-native": "0.57.5"
},
"devDependencies": {
"@types/react-native": "0.57.13",
"parcel-bundler": "^1.6.1"
},
"keywords": []
}
Bien que j’ai eu tous les bons chargeurs de babel dans mon fichier de configuration .babelrc. Ce script build avec parcel-bundler produisait l’erreur de jeton inattendue <et les erreurs de type mime dans la console du navigateur lors de l’actualisation de la page de manuel.
"scripts": {
"build": "parcel build ui/index.html --public-url ./",
"dev": "parcel watch ui/index.html"
}
La mise à jour du script de construction a corrigé les problèmes pour moi.
"scripts": {
"build": "parcel build ui/index.html",
"ui": "parcel watch ui/index.html"
}
Si vous êtes comme moi et enclin à commettre des erreurs stupides, vérifiez également votre package.json s'il contient votre preset Babel:
"babel": {
"presets": [
"env",
"react",
"stage-2"
]
},
Vous pouvez utiliser un code comme ceci:
import React from 'react';
import ReactDOM from 'react-dom';
var LikeOrNot = React.createClass({
displayName: 'Like',
render: function () {
return (
React.createElement("li", null, "Like")
);
}
});
ReactDOM.render(<LikeOrNot />, document.getElementById('main-content'));
Et n'oubliez pas d'ajouter <div id='main-content'></div>
dans la body
dans votre html
Mais dans votre fichier package.json, vous devriez utiliser ces dépendances:
"dependencies": {
...
"babel-core": "^6.18.2",
"babel-preset-react": "^6.16.0",
...
}
"devDependencies": {
...
"babel": "^6.5.2",
"babel-loader": "^6.2.7",
"babel-preset-es2015": "^6.18.0",
"jsx-loader": "^0.13.2",
...
}
C'est un travail pour moi mais j'ai aussi utilisé webpack, avec cette option (dans webpack.config.js):
module: {
loaders: [
{
test: /\.jsx?$/, // Match both .js and .jsx files
exclude: /node_modules/,
loader: "babel-loader",
query:
{
presets: ['es2015', 'react']
}
}
]
}
Dans mon cas, en plus des presets babel
, je devais aussi ajouter ceci à mon .eslintrc
:
{
"extends": "react-app",
...
}
Je viens de commencer à apprendre React
aujourd'hui et je faisais face au même problème. Ci-dessous le code que j'avais écrit.
<script type="text/babel">
class Hello extends React.Component {
render(){
return (
<div>
<h1>Hello World</h1>
</div>
)
}
}
ReactDOM.render(
<Hello/>
document.getElementById('react-container')
)
</script>
Et comme vous pouvez le constater, j’avais manqué une virgule après avoir utilisé <Hello/>
. Et l'erreur elle-même indique sur quelle ligne nous devons regarder.
Donc, une fois que j'ai ajouté une virgule avant le deuxième paramètre pour la fonction ReactDOM.render()
, tout a commencé à fonctionner correctement.