私はReactjsから始めて、表示する簡単なコンポーネントを書いていた
li
タグこのエラーに遭遇しました:
予期しないトークン '<'
例をhttp://jsbin.com/UWOquRA/1/edit?html,js,console,outputの下のjsbinに配置しました
私が間違っていることを教えてください。
私はReactjsから始めて、表示する簡単なコンポーネントを書いていた
li
タグこのエラーに遭遇しました:
予期しないトークン '<'
例をhttp://jsbin.com/UWOquRA/1/edit?html,js,console,outputの下のjsbinに配置しました
私が間違っていることを教えてください。
回答:
更新: React 0.12+では、JSXプラグマは不要になりました。
ファイルの先頭にJSXプラグマを必ず含めてください。
/** @jsx React.DOM */
この行がない場合、jsx
バイナリおよびブラウザー内トランスフォーマーはファイルを変更しません。
type="text/babel"
。JavaScriptの勇敢な新しい世界
問題予期しないトークン '<'は、Babelプリセットがないためです。
解決策:次のようにwebpack構成を構成する必要があります
{
test : /\.jsx?$/,
exclude: /(node_modules|bower_components)/,
loader : 'babel',
query : {
presets:[ 'react', 'es2015' ]
}
}
ここで、.jsxは.jsと.jsxの両方の形式をチェックします。
次のようにnodeを使用してbabel依存関係を簡単にインストールできます
npm install babel-preset-react
ありがとうございました
npm install babel-preset-react
私の問題を解決しました。
.babelrc
だけで、プロジェクト内のファイルを"presets": ["env", "react", "es2015"]
、それはそれです!
そのJSXコードをJavaScriptにトランスパイル/コンパイルするか、ブラウザ内トランスフォーマーを使用する必要があります
http://facebook.github.io/react/docs/getting-started.htmlを見て、<script>
タグをメモします。JSXがブラウザーで機能するには、これらのタグが含まれている必要があります。
<script type="text/jsx">
タグを、あなたがしたい場合は、A hastebin.orgにあなたの全体のコードを貼り付けてください貼り付ける
ここにあなたの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>
このコードを単一のファイルから実行すると、動作するはずです。
あなたはこのバベルのバージョンを使用する必要があります解析し、正しいタグの場合:https://cdnjs.cloudflare.com/ajax/libs/babel-core/5.8.24/browser.js と属性「タイプ= 『テキスト/バベル』」スクリプトで。さらに、カスタムスクリプトは「body」タグ内にある必要があります。
実際のサイト構成を考慮すると、ReactJSをヘッドで実行する必要があります
<!-- Babel ECMAScript 6 injunction -->
<script src="https://unpkg.com/babel-standalone@6/babel.min.js"></script>
そしてあなたのjsファイルに属性を追加してください-type = "text / babel" like
<script src="../js/r1HeadBabel.js" type="text/babel"></script>
次に、以下のコード例が機能します:
ReactDOM.render(
<h1>Hello, world!</h1>,
document.getElementById('root')
);
次のコードを使用します。ReactとReact DOMへの参照を追加しました。ES6 / Babelを使用して、JSコードを通常のJavaScriptに変換します。RenderメソッドはReactDOMから派生していること、およびrenderメソッドがDOMで指定されたターゲットを持っていることを確認してください。render()メソッドがターゲット要素を見つけられないという問題に直面する場合があります。これは、DOMがレンダリングされる前に反応コードが実行されるために発生します。これに対抗するには、jQuery ready()を使用してReactのrender()メソッドを呼び出します。これにより、DOMが最初にレンダリングされることが確実になります。アプリスクリプトでdefer属性を使用することもできます。
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>
JSコード:
var LikeOrNot = React.createClass({
render: function () {
return (
<li>Like</li>
);
}
});
ReactDOM.render(<LikeOrNot />,
document.getElementById('main-content'));
これで問題が解決することを願っています。:-)
.babelrcが、サブフォルダー内ではなく、アプリケーションルートフォルダー内にあるかどうかを確認します。その場合は、ファイルをルートに移動してください。
次のようなコードを使用できます。
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'));
に追加すること<div id='main-content'></div>
を忘れないbody
でくださいhtml
しかし、package.jsonファイルでは、次の依存関係を使用する必要があります。
"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",
...
}
それは私にとってはうまくいきますが、私はこのオプションで(webpack.config.jsに)webpackも使用しました:
module: {
loaders: [
{
test: /\.jsx?$/, // Match both .js and .jsx files
exclude: /node_modules/,
loader: "babel-loader",
query:
{
presets: ['es2015', 'react']
}
}
]
}
私React
は今日学習を始めたばかりで、同じ問題に直面していました。以下は私が書いたコードです。
<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>
ご覧のとおり、を使用し<Hello/>
た後、カンマ(、)を逃しました。そしてエラー自体は、どの行を見る必要があるかを示しています。
したがって、ReactDOM.render()
関数の2番目のパラメーターの前にコンマを追加すると、すべて正常に機能し始めました。
あなたがそれをすることができるもう一つの方法はこちらですhtml
<head>
<title>Parcel Sandbox</title>
<meta charset="UTF-8" />
</head>
<body>
<div id="app"></div>
<script src="src/index.js"></script>
</body>
</html>
パスがsrc / index.jsの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"));
このpackage.jsonを使用すると、すぐに起動して実行されます
{
"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": []
}
ただし、.babelrc構成ファイルにはすべての適切なバベルローダーが含まれていました。parcel-bundlerを使用したこのビルドスクリプトは、手動でページを更新すると、ブラウザーコンソールで予期しないトークンエラー<およびMIMEタイプエラーを生成していました。
"scripts": {
"build": "parcel build ui/index.html --public-url ./",
"dev": "parcel watch ui/index.html"
}
ビルドスクリプトを更新すると、問題が解決しました。
"scripts": {
"build": "parcel build ui/index.html",
"ui": "parcel watch ui/index.html"
}